2014-02-20 38 views
0

我正在創建一個非常簡單的應用程序,它從一個文件讀取一些輸入並生成具有該信息的另一個文件。我在Windows 7上運行它,它沒有任何問題,但是當我在Mac OS上運行它時,特殊字符不能正確顯示。編寫文件時的java編碼問題

這裏是我的代碼:

Writer writer = new BufferedWriter(
    new OutputStreamWriter(
     new FileOutputStream(destiny),"utf-8")); 
writer.write(infoFromInputFile); 
writer.close(); 

我聲明我FileOutputStream中使用UTF-8編纂,當我檢查了創建文件的屬性,它說,它是UTF-8,但特殊字符像¿,á,é,í,¡等等顯示錯誤。

爲什麼會發生這種情況的任何想法?

+0

什麼是'infoFromInputFile'?它從何而來?你的終端是否支持顯示你提到的字符? – fge

+0

infoFromInputFile是一個帶有特殊字符的字符串。我把它印在控制檯上,它被適當地顯示出來。 – user2751809

+1

請不要套用重要的信息,比如「像......這樣的特殊字符」。做一個複製/粘貼,以顯示你所看到的,最好在一個代碼塊(縮進4個空格),並告訴我們你在哪裏/如何顯示數據。輸出結果很可能是正確的,無論是顯示數據都不支持UTF-8。 –

回答

0

你是如何檢查輸出文件的?也許你打開它的編輯器,或者將它轉儲到控制檯(或控制檯本身)的命令,錯誤地呈現文件的內容? (也就是說,文件可能是正確的,並且您檢查它的內容假設它不是UTF-8。)

或者,您確定已打開輸入文件(推測使用Reader?)正確的編碼?

您需要檢查一些東西:

  • 首先,我建議對作家叫flush(),關閉它之前。

  • 原始文件(輸入文件)的實際編碼是什麼?輸入文件是否有兩種不同的編碼(一種在Windows上,另一種在Mac上)?或者相同(也許UTF-8在兩個)?我猜測默認編碼(Java假定的,如果你不告訴閱讀器的話)可能在Windows和Mac(甚至是在不同版本)上有所不同。

  • 當你閱讀它時,你打開輸入文件的是什麼編碼? (這應該與上面的內容相匹配)。

  • 在處理文件時,您是否在輸入和輸出之間執行了任何操作,可能會引入奇數字符? (例如,對Unicode值進行算術運算。)

0

我找到了解決方案。 Mac對.java文件使用的編碼不同於Windows和Linux(我也嘗試過並且運行良好)。要創建UTF-8編碼的文件,你必須使用以下選項來運行程序:

java -Dfile.encoding=UTF-8 YourJavaClass

感謝您的幫助。