2012-07-07 98 views
3

我完成了一個項目,在該項目中,我從用記事本編寫的文本文件中讀取。 我的文本文件中的字符是阿拉伯語,文件編碼類型是UTF-8。當在Netbeans(7.0.1)中啓動我的項目時,一切似乎都沒有問題,但是當我將項目構建爲(.jar)文件時,以這種方式顯示的字符是:ÇáãæÇÞÚááåØæíÑ。 我該如何解決這個問題?從文本文件中讀取阿拉伯字符

+4

你能告訴我們你是如何從文件中讀取這些字符並使用它們的? – Pshemo 2012-07-07 18:34:37

回答

3

您很可能在某處使用JVM默認字符編碼。如果您100%確定您的文件使用UTF-8編碼,請確保您在閱讀時明確指定UTF-8。例如這段代碼被打破:

new FileReader("file.txt") 

,因爲它使用JVM默認的字符編碼 - 你可能沒有控制權,顯然NetBeans使用UTF-8,而您的操作系統定義不同的東西。請注意,如果你希望你的代碼是可移植的,這使得FileReader類完全無用。

而是使用下面的代碼片段:

new InputStreamReader(new FileInputStream("file.txt"), "UTF-8"); 

你沒有提供你的代碼,但是這應該給你一個總體印象,這應如何實現。

+1

就是這樣,非常感謝。 – 2012-07-07 21:58:23

0

也許這個例子會有所幫助。我將嘗試將utf-8文件的內容打印到以「Cp852」編碼的IDE控制檯和系統控制檯中。

d:\data.txt包含ąźżćąś adsfasdf

讓我們檢查這個代碼

//I will read chars using utf-8 encoding 
BufferedReader in = new BufferedReader(new InputStreamReader(
     new FileInputStream("d:\\data.txt"), "utf-8")); 

//and write to console using Cp852 encoding (works for my windows7 console) 
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, 
     "Cp852"),true); // "Cp852" is coding used in 
        // my console in Win7 

// ok, lets read data from file 
String line; 
while ((line = in.readLine()) != null) { 
    // here I use IDE encoding 
    System.out.println(line); 
    // here I print data using Cp852 encoding 
    out.println(line); 
} 

當我在Eclipse輸出運行它會

ąźżćąś adsfasdf 
Ą«ľ†Ą? adsfasdf 

但是從系統控制檯輸出將是

enter image description here

+0

感謝您的幫助 – 2012-07-07 21:59:42

+0

如果我的回答真的有點幫助,我很高興:) – Pshemo 2012-07-07 22:02:56