3

I had finished a project in which I read from a text file written with notepad. The characters in my text file are in Arabic language,and the file encoding type is UTF-8. When launching my project inside Netbeans(7.0.1) everything seemed to be ok,but when I built the project as a (.jar) file the characters where displayed in this way: ÇáãæÇÞÚááÊØæíÑ. How could I solve This problem please?

4

2 に答える 2

3

ほとんどの場合、どこかでJVMのデフォルトの文字エンコードを使用しています。ファイルがUTF-8を使用してエンコードされていることを100%確信している場合は、読み取り時にもUTF-8を明示的に指定してください。たとえば、このコードは壊れています。

new FileReader("file.txt")

これは、JVMのデフォルトの文字エンコードを使用しているためです。これは制御できない可能性があり、オペレーティングシステムが別の何かを定義している間、NetbeansはUTF-8を使用しているようです。FileReaderコードを移植可能にしたい場合、これによりクラスが完全に役に立たなくなることに注意してください。

代わりに、次のコードスニペットを使用してください。

new InputStreamReader(new FileInputStream("file.txt"), "UTF-8");

あなたはあなたのコードを提供していませんが、これはあなたにこれがどのように実装されるべきかという一般的な印象を与えるはずです。

于 2012-07-07T19:01:40.463 に答える
2

たぶん、この例は少し役に立ちます。「Cp852」でエンコードされた utf-8 ファイルのコンテンツを IDE コンソールとシステム コンソールに出力しようとします。

私のd:\data.txt含むąźżćąś adsfasdf

このコードを確認しましょう

//I will read chars using utf-8 encoding
BufferedReader in = new BufferedReader(new InputStreamReader(
        new FileInputStream("d:\\data.txt"), "utf-8"));

//and write to console using Cp852 encoding (works for my windows7 console)
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out,
        "Cp852"),true); // "Cp852" is coding used in
                    // my console in Win7

// ok, lets read data from file
String line;
while ((line = in.readLine()) != null) {
    // here I use IDE encoding
    System.out.println(line);
    // here I print data using Cp852 encoding
    out.println(line);
}

Eclipseで実行すると、出力は次のようになります

ąźżćąś adsfasdf
Ą«ľ†Ą? adsfasdf

ただし、システムコンソールからの出力は

ここに画像の説明を入力

于 2012-07-07T19:09:58.937 に答える