出現應用程序讀取XML文件亂碼的場景:程序員
加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的;若是對xml文件進行修改了,其中包含中文字符的內容,另存爲其餘格式化時(好比unicod,ANSI)等等格式,則新保存的配置文件,程序讀取時候將會出現亂碼,不能正常的讀取。瀏覽器
驗證以下方法:編輯器
(1)、能夠將XML文件拖放在IE瀏覽器上,會出現XML文件沒法正常的在瀏覽器上面渲染。工具
(2)、經過Visual studio 打開該XML文件,會出現加載格式錯誤!開發工具
參看地址:http://blog.csdn.net/dinglang_2009/article/details/6895355編碼
在平常開發工做中,咱們常常會使用到XML,早已成爲了一種標準。它的用途很是的普遍,但這些不是本文所重點討論的。spa
相信你們在作開始時候常常碰到過「亂碼」的問題,這是中國程序員很是頭疼的問題。我一直很想深刻研究關於「編碼」的原理,無奈水平有限,那些枯燥的理論(二進制,ASCII,Unicode,UTF-8,gb2312,ISO ...光這些就讓我看的兩眼發黑了),實在看不下去,也很難真正搞懂搞明白。望各位網友多指點......操作系統
我將用工做中遇到的一個「XML文件亂碼」的簡單問題,解決問題,分析其背後的原理。.net
首先,咱們在本地新建一個文本文件,將後綴名改成".XML」, 而後用用記事本打開,往裏面添加一些符合XML文檔規範的內容。如圖所示:unix
寫好以後,按「ctrl+s」保存,而後使用IE瀏覽器打開該XML文件,驗證該XML文檔的規範及正確性。不料,竟然解析出錯了,以下:
這是咋回事呢?個人XML文檔定義的格式好像沒問題啊。無效字符?這確定是典型的「編碼」問題了。聰明的我第一就想到了,調整IE瀏覽器的「編碼」嘛。
但是打開「查看」「編碼」,發現那些編碼格式全是灰色的,好像不能選擇哦。這是由於,在定義XML文檔的時候,指定了編碼格式爲"UTF-8",這就至關於告訴了瀏覽器(XML解析引擎):你必須使用"UTF-8"編碼去解析我,因此沒法使用其餘的編碼格式去查看了。
這是由於,咱們在使用記事本保存該文檔的時候,沒有選擇編碼格式,默認使用的是操做系統編碼(中文版的系統),也就是對應的"GB2312」編碼。當咱們的IE瀏覽器,再使用咱們指定的UTF-8編碼去解析該XML文檔的時候,出現了亂碼,因此形成了上面的錯誤。(Windows中的文件保存在硬盤上,默認使用操做系統編碼。好比咱們XML文檔中定義的「中國」這兩個字,保存好後,假如其對應的GB2312多是"10001",而在UTF-8編碼中的,「10001」對應的就不是「中國」了,要麼找不到,要麼是亂碼,因此IE就拒絕顯示了)。那咱們應該怎麼辦呢?有兩種辦法能夠解決。
第一,咱們在xml文檔定義時,指定其編碼爲gb2312,以下圖所示:
保存以後,咱們再使用IE瀏覽器打開,結果如圖:
恭喜,這個問題解決了。可是這種方法不推薦使用。由於咱們在定義XML文檔時候,爲了文檔的通用性,咱們通常使用UTF-8編碼。
第二種方法:
咱們再用記事本打開該文檔,點擊「另存爲」,發現下面會有「編碼」選項,選擇「UTF-8」以後再試。
其實,咱們在使用諸如 Eclipse 或者Microsoft Visual Studio之類的開發工具來定義XML文檔,並不會碰到上面的問題。緣由是這些IDE都很是「聰明」,你的XML文檔指定的是那種編碼格式,IDE在將XML文檔保存到硬盤的時候,就自動使用那種格式。因此,不少侷限於使用某種IDE開發的程序員,其實並不明白這些知識及其背後的原理,但他們作開發起來同樣很順手。早年據筆者瞭解,國內有不少大牛,寫代碼都是用EditPlus之類的文本編輯器,而那些在Linux/unix上面的大牛,不少都是用VI/VIM來編碼。大概這就是差距吧。