2012-10-11 52 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平臺上的這個批處理實用程序。

相關問題