JDom輸出UTF 8的XML完美解決

2021-05-21 20:22:50 字數 1135 閱讀 1418

現象描述: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的命令模式中...