少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(22)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          完美的解決方法從辟謠開始:
          1)JDOM是否生成UTF-8的文件與Format是否設置無關,只有輸出其他字符編碼才需要設置,見下面的注釋。
          2)JDOM輸出UTF-8文件亂碼的根本原因并非在JDOMAPI,而是在JDK。
          具體描述:
              JDOM的輸出類XMLOutputter有兩個output接口,除了都具有一個Document參數外,分別接受Writer和 OutputStream參數。
              這給我們一個錯覺,兩個接口可以任意使用。
              首先我們用output(doc,System.out)來做測試,此時得到亂碼,
                然后我們改為output(doc,new PrintWriter(System.out))來測試,輸出不是亂碼,
                也就是說在控制臺的時候一定要用一個Writer接口包裝一下。
               然后我們用output(doc,new FileWriter(path))來做測試,結果卻得到亂碼,
                然后我們改為output(doc,new FileOutputStream(path))來測試,輸出不是亂碼,
                也就是說在輸出文件的時候一定要用一個OutputStream接口包裝一下。
               瘋了吧?呵呵,很搞笑是吧。經過到JDOM的源碼中調試,發現沒有任何問題,問題出在了JDK里面。
          JDK內的對應接口處理:
          1)PrintWriter類有參數為OutputStream的構造方法,因此可以從System.out包裝到PrintWriter
          2)FileWriter類沒有參數為OutputStream的構造方法,因此不能從FileOutputStream包裝到 FileWriter
          3)如果PrintWriter類用了參數為Writer的構造方法(Writer實現為FileWriter),最后輸出也是亂碼
          4)如果用一個FileOutputStream來包裝一個控制臺輸出,也是亂碼
          因此,對于JDK內的各種輸出體系,各種InputStream、OutputStream、reader和writer要充分認識,否則極容易出現一些意想不到的問題。


          posted on 2012-08-15 09:34 abin 閱讀(680) 評論(0)  編輯  收藏 所屬分類: JDOM
          主站蜘蛛池模板: 定远县| 营山县| 普格县| 土默特左旗| 运城市| 长海县| 津市市| 怀集县| 沁阳市| 桐乡市| 右玉县| 阳高县| 衡水市| 观塘区| 扶绥县| 辽宁省| 金川县| 乌拉特前旗| 深水埗区| 长顺县| 安平县| 清丰县| 延川县| 汽车| 成武县| 江油市| 金沙县| 平罗县| 怀宁县| 濮阳市| 全南县| 南岸区| 旬邑县| 迭部县| 伊宁市| 平利县| 随州市| 凌源市| 若羌县| 梧州市| 杭州市|