- PR -

デスクトップフォルダの文字化け

1
投稿者投稿内容
stitch
会議室デビュー日: 2008/04/01
投稿数: 2
投稿日時: 2008-04-01 14:53
こんにちは。初めての投稿です。
宜しくお願いします。

デスクトップパスを取得してFileクラスを生成したいです。
ソースコードです。

public static void main(String s[]) {
 String cmdline = "reg query \\\\"HKCU\\\\\\\\Software\\\\\\\\Microsoft\\\\\\\\Windows\\\\\\\\CurrentVersion\\\\\\\\Explorer\\\\\\\\Shell Folders\\\\" /v Desktop";

 try {
  String line;
 
  Process p = Runtime.getRuntime().exec(cmdline);
  BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

  while ((line = input.readLine()) != null) {
   System.out.println(line);
  }
  input.close();

} catch (Exception err) {
  err.printStackTrace();
 }
}

多分、"デスクトップ"が"ƒfƒXƒN"になってFile.existもfalseになると思いますが...
対応策をご存知の方がいらっしゃいましたら、ご教示お願いします。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-04-01 15:26
本当にこれ、実行したの?
全角スペースが入ってるのはともかく、\(¥)の数も合ってないし。
そもそもregは、ファイルパスと違って、余計なセパレータがはいってると
受け付けてくれないみたいね。

んで実行した結果。
文字化けは起こらないけど、パスの表示が途中でちょん切られます。
まあ、CUIにはよくあることだね。
結果も複数行にかけて表示されるし、この結果から望みのパスを取得するのは面倒くさそうだ。
環境変数からUSERPROFILEを取得した方が簡単だろうな。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-04-01 16:17
¥の数は@ITのバグでむやみに増えたりするんでそっちのような気がしますね。

exec()の結果を取る時点でエンコードは何で返っていますか?
InputStreamReaderでちゃんとエンコード指定しましょう。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2008-04-01 17:16
 これはWindowsの出力画面が特別なことをしているような気がします.
コマンドラインで(全角の¥にしてます)
reg query "HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Explorer¥Shell Folders¥" /v Desktop
とすると
Desktop REG_SZ C:¥Documents and Settings¥xxx¥デスクトップ
となりますが
reg query "HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Explorer¥Shell Folders¥" /v Desktop > a.txt
でファイルに出力すると
Desktop REG_SZ C:¥Documents and Settings¥xxx¥デスク
となり、Javaの標準出力ではファイル出力のようにデータを表示しています。
 なので、コマンドを考え直すべきと思います。

あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-04-01 17:27
reg queryをJavaから実行してみると
結果に日本語が混ざっている場合
混ざっている日本語文字数/2バイトが
削られてしまうようですね

Process#getInputStreamをreadした結果から既に
欠落している感じなので
reg queryを使っての取得は諦めた方がいいかも
もしくは削れることを前提として
デスク
で終わったら
デスクトップ
という風に変換してあげるといいかもしれません

>Edosson様
全角スペースは見やすくした結果かと思われますし
////はここの掲示板の困った仕様なので仕方ないかと思います。
stitch
会議室デビュー日: 2008/04/01
投稿数: 2
投稿日時: 2008-04-02 10:30
回答ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)