現象描述:jdom輸出xml檔案,當使用字元編碼gbk時正常,而輸出utf-8時亂碼。
完美的解決方法從闢謠開始:
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要充分認識,否則極容易出現一些意想不到的問題。
測試的jdom版本:1.0、1.1
測試**:
另附一方法,將jdom的document物件,根據指定的編碼輸出字串:
iPhone解析非UTF 8的XML
做iphone的網路應用,處理xml是家常便飯,nsxmlparser用起來還是得心應手的。不過這個東西,處理非utf 8,會解析失敗。這篇文章就是想和大家一起分享一些這方面開發的新的。我們在某個rss位址,可以得到下面這樣的xml檔案。我這裡只是擷取一段,rthk on internet 即 時 ...
iPhone解析非UTF 8的XML
做iphone的網路應用,處理xml是家常便飯,nsxmlparser用起來還是得心應手的。不過這個東西,處理非utf 8,會解析失敗。這篇文章就是想和大家一起分享一些這方面開發的新的。我們在某個rss位址,可以得到下面這樣的xml檔案。我這裡只是擷取一段,rthk on internet 即 時 ...
utf 8 和 utf8的區別小記
utf 8 是標準寫法,php 在 windows 下邊英文不區分大小寫,所以也可以寫成 utf 8 utf 8 也可以把中間的 省略,寫成 utf8 一般程式都能識別,但也有例外 如下文 為了嚴格一點,最好用標準的大寫 utf 8 在資料庫中只能使用 utf8 mysql 在mysql的命令模式中...