XML 文檔中可以包含外語字母,如挪威語 ??? 或法語 êèé。要讓你的XML分解器理解這些字母,就應該把XML文檔存儲成Unicode(統一的字符編碼標准)。
b>Windows 95/98 記事本
Windows 95/98 記事本不能將文件保存成Unicode 格式。你可以用Notepad 編輯和保存包含外語字母(如挪威語和法語的??? 和 êèé)的XML 文檔,
< ?XML version="1.0"?>
< note>
< from>Jani< /from>
< to>Tove< /to>
< message>Norwegian: ???. French: êèé< /message>
< /note>
但是如果你保存文件並用IE 5.0打開它,就會得到一個錯誤信息。
b>帶有編碼的Windows 95/98 記事本
Windows 95/98 記事本文件必須用編碼屬性保存。 要避免這個錯誤,你可以向你的XML聲明中加上一個編碼屬性,但是不能使用Unicode。
這樣的編碼(用IE 5.0打開它), 就不會給出一個錯誤信息:
< ?XML version="1.0" encoding="Windows-1252"?>
這樣的編碼(IE 5.0打開它), 也不會給出錯誤信息:
< ?XML version="1.0" encoding="ISO-8859-1"?>
這樣的編碼(IE 5.0打開它), 會給出一個錯誤信息:
< ?XML version="1.0" encoding="UTF-8"?>
這樣的編碼(IE 5.0打開它), 會給出一個錯誤信息:
< ?XML version="1.0" encoding="UTF-16"?>
b>Windows 2000 記事本
Windows 2000 記事本可以將文件保存成Unicode。Windows 2000 中的記事本編輯器支持 Unicode。如果你選擇要將這個XML文件保存成Unicode (注意文檔中不包含任何編碼屬性):
< ?XML version="1.0"?>
< note>
< from>Jani< /from>
< to>Tove< /to>
< message>Norwegian: ???. French: êèé< /message>
< /note>
你可以用IE 5.0 打開它,而不會得到錯誤信息。
b>帶有編碼的Windows 2000 記事本
Windows 2000 記事本用"UTF-16"編碼將文件保存為Unicode。如果你向保存為Unicode的XML文件中增加一個編碼屬性,Windows 編碼值就會產生一個錯誤。
這樣的編碼(IE 5.0打開它), 會給出一個錯誤信息:
< ?XML version="1.0" encoding="Windows-1252"?>
這樣的編碼(IE 5.0打開它), 會給出一個錯誤信息:
< ?XML version="1.0" encoding="ISO-8859-1"?>
這樣的編碼(IE 5.0打開它), 會給出一個錯誤信息:
< ?XML version="1.0" encoding="UTF-8"?>
這樣的編碼(IE 5.0打開它), 不會給出一個錯誤信息:
< ?XML version="1.0" encoding="UTF-16"?>
b>錯誤信息
如果你試圖向Internet Explorer 5中裝載一個XML文檔,你會得到兩個不同的錯誤信息表示編碼的問題:
在文本內容中發現了一個無效字符: 如果XML文檔中的一個字符與編碼屬性不匹配,你就會得到這個錯誤信息。通常,如果你的XML 文檔中包含外語字母並且文件是用記事本這樣的單字節編碼編輯器保存的,而且沒有規定編碼屬性的話,就會得到這樣的錯誤信息。
從當前編碼轉換到不支持的指定編碼: 如果你的文件保存為Unicode/UTF-16,但是編碼屬性指定了單字節編碼,例如Windows-1252、 ISO-8859-1或UTF-8,你就會得到這樣的錯誤信息。另外如果你的文檔是用單字節編碼保存的,但是編碼屬性指定了雙字節編碼例如UTF-16的話,你也會得到這樣的錯誤信息。
結論
結論就是編碼屬性必須指定保存文檔時所使用的編碼。為避免這類錯誤,我的建議是: 總是將XML文件保存成沒有任何編碼信息的Unicode。使用一個支持Unicode的編輯器(Windows 2000 記事本就行),總是省略編碼屬性。