XML亂碼問題和encoding的理解,xml亂碼encoding
檔案編碼
檔案編碼也稱為字元編碼,用於指定在處理文本時如何表示字元。一種編碼可能優於另一種編碼主要取決於它能處理或不能處理哪些語言字元,不過通常首選的是 Unicode。讀取或寫入檔案時,未正確匹配檔案編碼的情況可能會導致發生異常或產生不正確的結果。編碼類別型
處理檔案時,Unicode 是首選編碼。Unicode 是全球範圍的字元編碼標準,該標準使用 16 位代碼值來表示現代計算中使用的所有字元,包括印刷中使用的技術符號和特殊字元。
encoding屬性和檔案格式的關係
我以前理解的是xml裡的encoding定義的編碼必須與檔案格式相匹配。即<? xml encoding="utf-8" ?>,那麼,檔案格式必須是一個utf-8檔案。encoding的值必須和檔案格式(即BOM,BOM就是 byte order mark的縮寫)相匹配,不然在解析XML時,可能會出現亂碼,但是實際不是這樣的。
W3C定義了三條XML解析器如何正確讀取XML檔案的編碼的規則:
1.如果文擋有BOM(位元組順序標記,一般來說,如果儲存為unicode格式,則包含BOM,ANSI則無),就定義了檔案編碼(另存新檔檔案時,選擇的編碼格式)。
2.如果沒有BOM,就查看XML encoding聲明的編碼屬性。
3.如果上述兩個都沒有,就假定XML文擋採用UTF-8編碼
有了這三條規則,那這個規則就清楚多了。
首先,XML解析器根據檔案的BOM(檔案儲存體格式)來解析檔案;如果沒找到BOM,由用XML裡的encoding屬性指定的編碼;如果xml裡encoding沒指定的話,就預設用utf-8來解析文檔。然後又可以推出,BOM和ENCODING都有的話,則以BOM指定的為準。
結論
結論是:編碼屬性應當被指定為文檔被儲存時所使用的編碼。
我最好的避免錯誤的建議是:
使用支援編碼的編輯器,如Editplus
確定編輯器使用的編碼(一般是可以查看和修改的)
在您的 XML 文檔中使用相同的編碼屬性,即encoding的值