2013-01-17 22 views
3

我們如何解決由FindBugs的報道Reliance on default encoding找到「依賴默認編碼」中的OutputStream

StringBuffer printData = getPrintData(data); 

    try { 
      OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(linkName))); 
      out.write(printData.toString()); 
      out.flush(); 

      final FileInputStream f = new FileInputStream(new File(linkName)); 
      return f; 
     } catch (final IOException ioe) { 
      ioe.printStackTrace(); 
     } 

我寫使用StreamWriter文件。

+0

什麼是'printData'? – Cozzamara

+0

printdata是一個StringBuffer對象 – Vasanth

回答

7

您構建OutputStreamWritersingle argument。這意味着它將使用默認的操作系統編碼將來自printData(即Unicode)的Java字符串轉換爲字節流(文件輸出),並且根據其本地化設置,您可能會在不同的計算機上獲得不同的結果。

例如,假設您的對象printData包含日文文本。當人們在日本和美國的Windows上運行你的軟件時,他們會得到不同的數據寫入文件。美國用戶可能會用問號(?)替換所有象形文字,而日本用戶可能會保留原始日文字符的UTF-8文件。如果原始文本包含多種語言,結果將更加難以預測。

這可能會或可能不會被您的應用程序接受,具體取決於它的作用和數據來自何處。這就是警告的內容。

如果您知道應用程序應該生成的文件編碼,則在構建OutputStreamWriter時可能需要明確選擇它。另一方面,如果您希望將其轉換爲機器的默認表示形式,請保持原樣。

+4

謝謝Cozzamara。!!!!!! 該問題已通過使用charset重建** OutputStreamWriter **得到解決。 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(new File(linkName)),Charset.forName(「UTF-8」)); – Vasanth