2012-10-11 60 views
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 

我不明白这个错误。为什么我会得到这个,我怎样才能克服这个错误?

+3

选择'UTF-8 charset'而在java文件保存代码。 – adatapost

+0

@Jayan你是否意识到你改变了整个问题的含义? –

+0

@ Suhail Gupta:对不起,我修改了更好的标题。基本上,一个带有unicode内容的文件是一个不同的问题。当相同的文件是一个Java源代码,修复是编辑/使用不同的编码等。 – Jayan

回答

2

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

  1. 使用是允许保存为Unicode 文件文本编辑器没有 BOM,如记事本++。
  2. 在源代码中只使用ASCII字符。在需要Unicode字符的地方使用\uXXXX -escape代码。 JDK附带了一个实用程序,用于将“本机”文本转换为此编码,称为native2ascii。例如,

    writer.write("غزل"); 
    

    将被转换成

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

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

+1

我已经将它保存为UTF-8格式。这就是我可以在.java文件中看到urdu字符串的原因。 –

2

Byte order mark

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或将源文件转换为另一种编码。记事本++可以转换单个文件编码,我不知道Windows平台上的这个批处理实用程序。

相关问题