xmlWriter以UTF-8格式写xml问题
轉(zhuǎn)載自:https://www.cnblogs.com/liaojie970/p/5280074.html
dom4j中的XMLWriter提供以下幾種構(gòu)造方法:
XMLWriter() XMLWriter(OutputFormat format) XMLWriter(OutputStream out) XMLWriter(OutputStream out, OutputFormat format) XMLWriter(Writer writer) XMLWriter(Writer writer, OutputFormat format)最簡單常用的可能是new XMLWriter(new FileWriter(...))這樣的形式。可如果你一旦這么用,就會造成編碼問題。由于dom4j對于文件編碼的選擇是用java本身類的處理方式(可以從源碼看到),這么寫就是采用FileWriter的處理方式,而FileWriter是不提供對編碼的處理的。于是會調(diào)用系統(tǒng)自身的編碼,比如用中文操作系統(tǒng),編碼方式就是gbk,但是它默認(rèn)的在文件頭寫上<?xml version="1.0" encoding="UTF-8"?>。
也就是說,他以當(dāng)前操作系統(tǒng)的編碼保存文件,并且竟然自動添加文件頭為"utf-8"格式,這會導(dǎo)致很多程序無法讀取正確編碼,而且具有很差的移植性(比如在windows下開發(fā),放到linux服務(wù)器下跑,畢竟一般linux服務(wù)器默認(rèn)local都是utf-8)。
解決途徑一:
使用new XMLWriter(new FileOutputStream(...))方法
這樣做,因為dom4j默認(rèn)使用utf-8編碼,即xml文件頭默認(rèn)編碼方式,并且內(nèi)容也會使用utf-8保存,這樣可以做到一致的編碼,不會出問題
解決途徑二:
使用new XMLWriter(new FileOutputStream(...), outputFormat)的構(gòu)造方法
OutputFormat xmlFormat = OutputFormat.createPrettyPrint(); xmlFormat.setEncoding("utf-8"); XmLWriter writer = new XMLWriter(new FileOutputStream(...), xmlFormat); writer.write(document); writer.close();如上,setEncoding可以設(shè)置存儲的文件編碼格式,createPrettyPrint是得到美化xml格式輸出。這樣的話,在不同的環(huán)境下可以獲得同樣的編碼讀寫,并且真正保證了文件標(biāo)稱與實際編碼的一致性。
注意如果使用OutputFormat是為了設(shè)置文件編碼,那千萬別用 XMLWriter(new FileWriter(...), outputFormat)構(gòu)造方法,因為如前面所說,FileWriter不會處理編碼,
所以即使你使用format.setEncoding("utf-8");他仍然不會使用utf-8編碼,而只是把文件頭指定為utf-8,這類似不使用outputFormat的情況。
總結(jié)
以上是生活随笔為你收集整理的xmlWriter以UTF-8格式写xml问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端一HTML:十一:其他选择器
- 下一篇: python五十七:str与repr,类