Java 为什么在尝试包含乌尔都语字符串时会出现编译错误?

Java 为什么在尝试包含乌尔都语字符串时会出现编译错误?,java,unicode,utf-8,illegal-characters,Java,Unicode,Utf 8,Illegal Characters,我正在尝试添加乌尔都语字符串غزل,如下所示: 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();

我正在尝试添加乌尔都语字符串
غزل
,如下所示:

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

我不理解这个错误。为什么会出现这种情况以及如何克服这种错误?

这取决于文本编辑器使用的字符集(编辑java源文件的地方)。尝试将其设置为
UTF-8
格式。

这取决于文本编辑器(编辑java源文件的地方)使用的字符集。尝试将其设置为UTF-8格式。

因此,您需要剥离BOM表或将源文件转换为其他编码。记事本++可以转换单个文件编码,我不知道Windows平台上有用于此的批处理实用程序。


因此,您需要剥离BOM表或将源文件转换为其他编码。记事本++可以转换单个文件编码,我不知道Windows平台上有用于此的批处理实用程序。

文件开头的字符来自字节顺序标记,一些文本编辑器喜欢将其插入文件开头。但是,Java编译器不接受具有BOM的文件。您有两个选择:

  • 使用允许以Unicode格式保存文件而不使用BOM表的文本编辑器,例如记事本++
  • 在源代码中仅使用ASCII字符。如果需要Unicode字符,请使用转义码。JDK附带了一个实用程序,用于将“本机”文本转换为这种编码,称为
    native2ascii
    。比如说,

    writer.write("غزل");
    
    将转换为

    writer.write("\u063a\u0632\u0644");
    

  • 文件开头的字符来自字节顺序标记,一些文本编辑器喜欢将其插入文件开头。但是,Java编译器不接受具有BOM的文件。您有两个选择:

  • 使用允许以Unicode格式保存文件而不使用BOM表的文本编辑器,例如记事本++
  • 在源代码中仅使用ASCII字符。如果需要Unicode字符,请使用转义码。JDK附带了一个实用程序,用于将“本机”文本转换为这种编码,称为
    native2ascii
    。比如说,

    writer.write("غزل");
    
    将转换为

    writer.write("\u063a\u0632\u0644");
    

  • 在.java文件中保存代码时选择
    UTF-8字符集
    。@Jayan你知道你改变了整个问题的意思吗?@Suhail Gupta:对不起,我已经用更好的标题修改了。本质上,具有unicode内容的文件是另一个问题。当同一个文件是java源代码时,修复程序是编辑器/使用不同的编码等@Jayan你在做什么?什么是java源文件?你知道我在问什么吗?@Jayan现在请不要在将代码保存到.java文件时对问题Choose
    UTF-8字符集
    进行任何编辑。@Jayan你知道你改变了整个问题的含义吗?@Suhail Gupta:对不起,我已经修改了更好的标题。本质上,具有unicode内容的文件是另一个问题。当同一个文件是java源代码时,修复程序是编辑器/使用不同的编码等@Jayan你在做什么?什么是java源文件?你知道我在问什么吗?@Jayan现在请不要对问题进行任何编辑,我已经以UTF-8格式保存了它。这就是我能在.java文件中看到乌尔都语字符串的原因。我已经用UTF-8格式保存了它。这就是我能在.java文件中看到乌尔都语字符串的原因。