2017-08-27 34 views
-1

我有從CP1250到UTF-8的正確編碼文件的問題。幾乎所有字符都正確轉換,但字符「N」和「R」沒有(有「?」字符「)。在Java中從CP1250到UTF-8的錯誤/奇怪的編碼文件

在Netbeans的我設置項目UTF-8編碼。

測試字符串的文件中可以是「skříňSKŘÍŇ」。在控制檯輸出:「skĹ™ĂĹ? ?。SKL ATL‡」輸出轉換,例如,在PHP不同,我到底

我的代碼:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("file-cp1250.txt"), "CP1250")); 
while ((line = br.readLine()) != null) { 
    line = new String(line.getBytes("UTF-8"), "CP1250"); 
    System.out.println(line); 
} 

感謝意見

+2

這沒有任何意義。你的'line'從文件中解碼爲'CP1250'。然後嘗試使用'getBytyes'將其編碼爲utf8,並嘗試將這些utf8字節解碼爲'CP1250'。爲什麼? –

+1

換句話說,你認爲'new String(line.getBytes(「UTF-8」),「CP1250」)的用途是什麼? –

回答

3

以下是主要正確:

BufferedReader br = new BufferedReader(
    new InputStreamReader(new FileInputStream("file-cp1250.txt"), "CP1250")); 
while ((line = br.readLine()) != null) { 
    System.out.println(line); 
} 

這就是被指定爲在Windows /代碼頁1250 InputStream中的二進制數據,並讀取解碼Java的String始終持有的Unicode(因此它可以結合人l腳本)。

但是System.out通常是平臺相關的控制檯,這可能不僅僅是Cp1250,而是別的。 Unicode可能會轉換爲Cp1252,Microsofts Latin-1。然後有人想到有一些錯誤。哪裏System.out根本無法使用。

+0

謝謝你。我錯過了OutputStreamWriter的編碼: - /。非常感謝! – JKLIR