0

Java で国際文字の読み取りに問題があります。

使用されているデフォルトの文字セットは UTF-8 で、私の Eclipse ワークスペースもこれに設定されています。

私は韓国語の文字を含むインターネットからのビデオのタイトルを読んでいます (実際には Gangam Style ;))、私は次のようにこれを行っています:

BufferedReader stdIn = new BufferedReader(new InputStreamReader(shellCommand.getInputStream()));
String fileName = null, output = null;
while ((output = stdInput.readLine()) != null) {
if (output.indexOf("Destination") > 0) {
    System.out.println(output);

タイトルが「PSY - GANGNAM STYLE (강남스타일) M/V」であることはわかっていますが、コンソールには代わりに「PSY - GANGNAM STYLE () M V」が表示され、プログラムでさらにエラーが発生します。

InputStream Reader がこれらの文字を正しく読み取っていないようです。

誰にもアイデアはありますか?私は過去 1 時間インターネットを精査しましたが、答えは見つかりませんでした。よろしくお願いします。

4

2 に答える 2

2

使用されているデフォルトの文字セットは UTF-8 です

デフォルトはどこ?Java自体で、またはビデオで?これを明示的に指定すると、より明確になります。ビデオデータについても正しいことを確認する必要があります。

InputStream Reader がこれらの文字を正しく読み取っていないようです。

わかっているのは、テキストがコンソールに正しく表示されていないということだけです。正しく読み取られていない正しく表示されていません。文字列の正確な内容を確認できるように、各文字の Unicode 値を出力する必要があります。例えば:

static void logCharacters(String text) {
    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);
        System.out.println(c + " " + Integer.toHexString(c));
    }
}
于 2012-10-19T16:38:17.587 に答える
1

Charset.defaultCharset().name()else useを使用してデフォルトの文字セットを取得する必要があります

InputStreamReader in = new InputStreamReader(shellCommand.getInputStream(), "UTF-8");

サンプルプログラムを試してみたところ、Eclipseで正しく印刷されました。AlexR が指摘したように、Windows コンソールの問題である可能性があります。

byte[] bytes = "PSY - GANGNAM STYLE (강남스타일) M/V".getBytes();
    InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(bytes));
    BufferedReader bufferedReader = new BufferedReader(reader);
    String str = bufferedReader.readLine();
    System.out.println(str);

出力:

 PSY - GANGNAM STYLE (강남스타일) M/V
于 2012-10-19T16:39:11.690 に答える