0

システムコンソールからフローを読み取ろうとしていますが、エンコーディングに問題があります。私はフランス語なので、キーボードには「é」、「è」、「à」などの特別な文字があります。

コンソールのコンテンツをテキスト領域に配置すると、次のようになります。

Le volume dans le lecteur C s'appelle DisqueC
Le num?ro de s?rie du volume est CE7........
3 fichier(s)           20?229 octets
5 R?p(s)  450?096?623?616 octets libres

特別な文字を自動的に「?」に置き換えます。サイズにも問題があります。

私はそのようなコンソールの内容を読みました:

BufferedReader stdInput = new BufferedReader(new InputStreamReader(child.getInputStream(), "UTF-8"));
BufferedReader stdError = new BufferedReader(new InputStreamReader(child.getErrorStream(), "UTF-8"));

String line;
byte[] lineBytes;
while ((line = stdInput.readLine()) != null)
{
    lineBytes = line.getBytes("UTF-8");
    buffer.append("\t\t" + new String(lineBytes, "UTF-8") + "\n");
}
stdInput.close();
while ((line = stdError.readLine()) != null)
{
lineBytes = line.getBytes("UTF-8");
buffer.append("\t\t" + new String(lineBytes, "UTF-8") + "\n");
}
stdError.close();

次に、バッファがソケットを介して送信され、そのようにjTextAreaに表示されます。

textArea.append(new String(console_output.getBytes(), "UTF-8"););

それで、なぜ私がエンコーディングでこの問題を抱えているのか誰かに教えてもらえますか?

ありがとう。

4

2 に答える 2

1

Windowsで実行している場合は、それを忘れてください。デフォルトのコマンドラインエンコーディングはCP850で、これはがらくたです。セッション用に変更することはできますが、バッチファイルを呼び出すことはできません。

試すchcp 65001

これはUTF-8に切り替わります。このStackOveflow検索を確認してください。

于 2012-04-18T09:39:27.480 に答える
0

場合によっては、この関数はうまくいくでしょう:

System.out.println(String.format(Locale.UK, <your String value>, args));
于 2014-02-26T12:48:18.477 に答える