Live a simple life

          沉默(zhu_xing@live.cn)
          隨筆 - 48, 文章 - 0, 評論 - 132, 引用 - 0
          數據加載中……

          【原創】JDK 1.4有關編碼的一個bug

                  在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



          本博客中的所有文章、隨筆除了標題中含有引用或者轉載字樣的,其他均為原創。轉載請注明出處,謝謝!

          posted on 2008-08-01 19:57 zhuxing 閱讀(1774) 評論(1)  編輯  收藏 所屬分類: Java

          評論

          # re: 【原創】JDK 1.4有關編碼的一個bug  回復  更多評論   

          記得我以前也是專門測試過這個問題,所以盡量是在代碼中來指定讀寫的字符集。
          2008-08-01 22:43 | 隔葉黃鶯
          主站蜘蛛池模板: 上栗县| 茂名市| 依安县| 景宁| 宜兴市| 常德市| 东光县| 新干县| 蕉岭县| 革吉县| 黄大仙区| 遂昌县| 赣州市| 密山市| 乐亭县| 沙田区| 冀州市| 澄江县| 闽侯县| 手游| 江永县| 宾阳县| 张家港市| 井陉县| 蒙山县| 霍州市| 四会市| 怀来县| 泌阳县| 昌平区| 闵行区| 洪雅县| 宜君县| 农安县| 合肥市| 安达市| 孙吴县| 大同市| 博野县| 秦安县| 资源县|