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 的文件。你有两个选择:

  1. 使用允许在没有BOM 的情况下以 Unicode 格式保存文件的文本编辑器,例如 Notepad++。
  2. 在源代码中仅使用 ASCII 字符。在需要 Unicode 字符的地方使用\uXXXX-escape 代码。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 回答