Dom4j的asXML 自動編碼的解決辦法

2021-09-22 03:34:50 字數 1287 閱讀 9994

在使用dom4j的時候,有時候需要將乙個document物件轉換為乙個string,可以直接呼叫document.asxml()方法來實現。可是呼叫這個方法的結果是:生成的字串按照utf-8進行了重新編碼。這樣,如果之前你的xml編碼為gbk,那麼你的呼叫此方法後,編碼就變為utf-8了,輸出的中文字元就發生亂碼。

有什麼解決方案呢,在網上找了很久,也沒找到原因。最後經過翻閱dom4j的api文件,終於找到乙個解決方案----重新格式化xml,這樣就有機會對xml重新編碼並獲取到想要string。

從此也想為什麼不提供乙個document.asxml(string charset)的方法呢?看來還是dom4j把中國人忽略了。

下面看看解決方案:

首先讀入檔案為string:

inputstream in = issueplan.

class.getclassloader().getresourceasstream(

"temp/test.xml"); 

if (in == 

null)  

string xml = stringfiletoolkit.stream2string(in, charset); 

document doc = 

null; 

try  

catch (documentexception e)  

這裡將xml忠實的按照原有的編碼讀取出來了,注意,讀取出來後,立即對doc物件指定編碼,否則會按照作業系統預設的編碼處理。

如果你在此處呼叫doc.asxml(),那麼,就得到了這個xml檔案utf-8的編碼,如果之間不是utf-8,那麼這樣編碼是錯誤的。

因此,要匯出合理編碼的字串,還要呼叫格式方法,這個方法是我自己寫的:

/** 

* 格式化xml文件 

* * @param document xml文件 

* @param charset    字串的編碼 

* @return 格式化後xml字串 

*/public

static string formatxml(document document, string charset)  

catch (ioexception e)  

return sw.tostring(); 

}

你可以隨意指定編碼,但是你呼叫之前必須保證你的字串編碼和這裡引數的編碼一致,這樣才是正確的呼叫。

-----------------------------------

這裡還有一篇文章,但是忽略了或者是迴避了dom4j的轉碼問題:

dom4j 使用dom4j生成xml

使用org.dom4j.element 建立xml 生成service.xml檔案 param tran 交易物件 param filepath 資料夾路徑 public static void exportservicexml listtranlist,string filepath servic...

dom4j簡單使用

公司這邊是用dom4j,主要是用來解析xml的,一般有這麼幾個操作 1.建立xml文件 org.dom4j.document doc documenthelper.createdocument 2.建立根元素並新增 element root documenthelper.createelement ...

Dom4J學習筆記

1.xml檔案的建立和解析 dom4j 1.dtd宣告格式 根元素 元素內節點的宣告 2.xml檔案的生成 input.jsp 3.xml檔案的解析 saxreader reader new saxreader document document reader.read new file strut...