3

このプログラムを実行すると、「?」が表示されます。Unicodeコードポイントの場合\u0508。これは、CP-1252をエンコードするデフォルトのWindows文字がこのコードポイントをマップできないためです。

しかし、このファイルをEclipseに「テキストファイルエンコーディング」= UTF-8として保存し、このプログラムを実行すると、正しい出力ACが得られます。

なぜこれが機能するのですか?つまり、JavaファイルはUTF-8として保存されますが、基盤となるWindowsOSエンコーディングはCP-1252です。私の質問は、元々UTF-8で書かれたUTF-16のテキストファイルを読み込もうとすると、出力がさまざまなボックス記号で奇妙になっているのと似ています。

public class e {
public static void main(String[] args) {
    System.out.println(System.getProperty("file.encoding"));
    String original = new String("A" + "\u0508" + "C");
    try {
        System.out.println("original = " + original);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}
4

2 に答える 2

3

JavaソースファイルをUTF-8またはWindows-1252として保存しても、どちらのエンコーディングもすべてのASCIIコードポイントを同じ方法でエンコードするため、違いはありません。また、ソースファイルはASCII文字のみを使用しています。

したがって、どこか別の場所でバグを見つけようとする必要があります。注意して行った手順をやり直して、テストをやり直すことをお勧めします。

于 2012-12-29T00:18:32.817 に答える
2

問題は、プログラムを実行するときのfile.encodingの設定と、System.outの宛先です。System.outが日食コンソールの場合、UTF-8日食コンソールに設定されている可能性があります。Windows DOSボックスの場合は、CP1252コードページであり、?のみが表示されます。この場合。

于 2012-12-29T00:43:32.233 に答える