0

غزل以下に示すように、ウルドゥー語の文字列を追加しようとしています。

class UnicodeCheck {
  public static void main(String args[]) {
   try {
    File f = new File("C:/Users/user/Desktop/unicodecheck.txt");
    FileWriter writer = new FileWriter(f);
    writer.write("غزل");
    writer.close();
   } catch(Exception exc) {
       exc.printStackTrace();
     }
 }
}

上記のプログラムをコンパイルしようとすると、このエラーが発生します。

UnicodeCheck.java:1: illegal character: \187
class UnicodeCheck {
 ^
UnicodeCheck.java:1: illegal character: \191
class UnicodeCheck {
  ^
2 errors

私はこのエラーを理解していません。なぜこれを取得し、どうすればこのエラーを克服できますか?

4

3 に答える 3

2

バイトオーダーマーク

The byte order mark (BOM) is a Unicode character used to signal the endianness
(byte order) of a text file or stream. Its code point is U+FEFF. BOM use is
optional, and, if used, should appear at the start of the text stream. 
Beyond its specific use as a byte-order indicator, the BOM character may also 
indicate which of the several Unicode representations the text is encoded in.

そのため、BOM を削除するか、ソース ファイルを別のエンコーディングに変換する必要があります。Notepad++ は単一のファイル エンコーディングを変換できますが、Windows プラットフォームでこのためのバッチ ユーティリティを認識していません。

于 2012-10-11T04:33:28.927 に答える
2

ファイルの先頭にある文字は、一部のテキスト エディタがファイルの先頭に挿入することを好むバイト オーダー マークに由来します。ただし、Java コンパイラは BOM を含むファイルを受け入れません。次の 2 つのオプションがあります。

  1. Notepad++ など、BOMなしでファイルを Unicode で保存できるテキスト エディターを使用します。
  2. ソース コードでは ASCII 文字のみを使用してください。Unicode 文字が必要な場合は、\uXXXXエスケープ コードを使用します。JDK には、「ネイティブ」テキストをこのエンコーディングに変換するユーティリティ プログラムが付属していますnative2ascii。例えば、

    writer.write("غزل");
    

    に変換されます

    writer.write("\u063a\u0632\u0644");
    
于 2012-10-11T22:28:53.753 に答える
0

これは、テキストエディタ(Javaソースファイルを編集する場所)で使用される文字セットによって異なります。UTF-8フォーマットで設定してみてください。

于 2012-10-11T04:21:24.403 に答える