JDK 1.4中存在一個有關編--ZT

在JDK 1.4中存在一個有關編碼的問題。簡要描述如下: 通過參數-Dfile.encoding="charset"設定特定的字符集,但是並不會被當作Reader或者Writer的默認字符集使用。這個問題,有時候會引起隱藏較深的亂碼問題。JDK 1.5和1.6中此問題已經不存在,所以,如果遇到在同樣默認字符集系統上面運行,基於JDK 1.5正常,基於JDK 1.4則出現亂碼問題的時候,注意一下是否由於此問題引起。 (原來JDK 1.4的這個bug在腦子中特別清晰,最近忘了,頭兩天遇到了,搞了半天~_~。發出來吧,也給大家提個醒) 測試程序如下: 1 public static void main(String[] args) { 2 try { 3 File file = new File("D:/text.txt"); 4 file.createNewFile(); 5 InputStreamReader reader = new InputStreamReader(new FileInputStream(file)); 6 OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file)); 7 System.out.println(reader.getEncoding()); 8 System.out.println(writer.getEncoding()); 9 } catch (IOException e) { 10 e.printStackTrace(); 11 } 12 } 【執行環境】 Windows XP中文,默認系統字符集是GBK 啓動參數設置:-Dfile.encoding=utf-8 在JDK 1.4.2版本上輸出如下: GBK GBK 在JDK 1.5.0_09版本上輸出如下: UTF8 UTF8 由以上測試結果可以看出,在JDK 1.4上面,通過參數-Dfile.encoding="charset"設定特定的字符集,但是並不會被當作Reader或者Writer的默認字符集使用在JDK 1.4版本上面,此可能引起很多問題,例如read的部分是由於某開源庫完成,則內部實現可能強制採用了-Dfile.encoding的配置;輸出由我們自己完成,則默認的writer並不會默認採用-Dfile.encoding的設置,這樣解碼和編碼用的字符集就不一致,可能就會引起亂碼問題。 簡而言之,在JDK 1.4上開發,在利用字符流編解碼需要依賴-Dfile.encoding設置的時候,要注意此問題。 附加說明: 1、可以對InputStreamReader和OutputStreamWriter兩個wrapper設定明確的編輯碼字符集 2、如果像和當前系統的-Dfile.encoding設置保持絕對一直,可以將System.getProperty("file.encoding")傳入InputStreamReader和OutputStreamWriter
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章