我正在尝试添加urdu字符串غزل
,如下所示:
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
我不明白这个错误。为什么我会得到这个以及如何克服这个错误?
答案 0 :(得分: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平台上的批处理实用程序。
答案 1 :(得分:2)
文件开头的字符来自字节顺序标记,某些文本编辑器喜欢将其插入文件的开头。但是,Java编译器不接受带有BOM的文件。您有两种选择:
在源代码中仅使用ASCII字符。您需要Unicode字符的位置使用\uXXXX
- 转义码。 JDK附带了一个实用程序,用于将“本机”文本转换为此编码,称为native2ascii
。例如,
writer.write("غزل");
将转换为
writer.write("\u063a\u0632\u0644");
答案 2 :(得分:0)
它取决于文本编辑器(编辑java源文件的位置)使用的字符集。尝试以UTF-8
格式设置它。