文章編號: 275883 - 上次校閱: 2007年10月26日 - 版次: 1.5

資訊: XML 編碼方式和 DOM 介面方法

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

「 可延伸標記語言 」 (XML) 資料的主要優點之一是它是獨立的平台。不過,正確的編碼方式必須指定以確保 XML 資料的不同平台之間的適當傳輸。本白皮書的 「 How 來編碼 XML 資料 」 討論議題詳細一般 XML 編碼方式:
http://msdn.microsoft.com/en-us/library/aa468560.aspx (http://msdn.microsoft.com/en-us/library/aa468560.aspx)
在大多數的案例下 XML 編碼錯誤是來自不同的預設編碼方式的 Microsoft XML 剖析器 (MSXML) 方法和介面的設定。清楚瞭解這些預設設定有助於防止編碼錯誤。

其他相關資訊

XML 編碼方式

MSXML 支援所有 Microsoft Internet Explorer 所支援的編碼方式。Internet Explorer 支援取決於哪一種語言套件安裝在電腦上 ; 這項資訊儲存在下列登錄機碼之下:
HKEY_CLASSES_ROOT\MIME\Database\Charset
MSXML 有下列的編碼方式的原生支援:
UTF-8
UTF-16
UCS 2
UCS 4
ISO-10646-UCS-2
Unicode-1-1-UTF-8
Unicode-2-0-UTF-16
Unicode-2-0-UTF-8
它也可識別 (在內部使用 WideCharToMultibyte API 函式用於對應) 下列的編碼方式:
美國 ascii
ISO-8859-1
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
視窗 1250
視窗 1251
視窗 1252
視窗 1253
視窗 1254
視窗 1255
視窗 1256
視窗 1257
視窗 1258
指定資料的編碼方式適當的位置是 XML 宣告。比方說如果資料以 ISO-8859-1 標準編碼,您可以指定這,如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
				
但此資訊不預設編碼是 UTF-8 或 UTF-16,存在的 XML 檔案的開頭是 UNICODE 位元組順序標記 (BOM) 而定。如果檔案開頭 UNICODE 位元組順序標記 (0xFF 0xFE) 或 (0xFE 0xFF) 文件被視為是以 UTF-16 編碼方式 ; 否則它位於 UTF-8。IXMLDOMDocument 介面的 [Save] 方法會維持原來的文件編碼方式。此方法的預設值為 UTF-8。

MSXML DOM 錯誤

從 XML 文件物件模型 (DOM) 介面方法傳回兩個常見的錯誤是:
在文字內容中找不到了無效的字元。
-以及-
不支援從目前的編碼,以指定的編碼方式的參數。
載入IXMLDOMDocument 介面的方法,這些錯誤通常發生在下列情況下:
  • 指定沒有編碼方式、 XML] 檔案的開頭找到沒有位元組順序標記,且資料中包含特殊字元 encoded in UTF-16 format (such as Swedish character ?, or 0xE5) rather than the default UTF-8 (0xC3 0xA5) format.
  • 指定的編碼方式並不符合 XML 資料的實際編碼方式。
很好的作法是永遠指定正確的編碼方式 XML] 宣告內,而不是接受預設的編碼方式。

與 MSXML 剖析器版本 2.5、 2.5 SP1 和 2.6 loadXML 方法的 IXMLDOMDocument 可以只載入 UTF-16 或 UCS-2 編碼資料。任何嘗試載入另一個編碼結果格式在下列的錯誤以編碼的 XML 資料:
不支援從目前的編碼,以指定的編碼方式的參數。
隨著 MSXML 3.0 (Msxml3.dll) 發行,就會移除這項限制,並下列程式碼執行不會發生錯誤:
hr = pXMLDoc->loadXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?><tag1>Abcdef</tag1>");
				
注意: 為 UTF-16 編碼,但是沒有位元組順序標記,開頭 IXMLDOMDocument 介面的 xml 屬性寫出 XML 資料。這可能會導致編碼的問題。

您也可能會收到這些錯誤,當您呼叫的 IXMLDOMNode 介面 transformNode 方法與一個 XSL 或 XSLT 的 XML 編碼方式的資訊指定的檔案,如下所示:
<xsl:output method="xml" encoding="UTF-8" />
				
transformNode 方法會傳回 BSTR,也就是根據定義的 UTF-16 編碼資料。保留編碼方式的較佳方法,就是呼叫 transformNodeToObject 方法,並儲存結果至資料流或新的 XML 文件,然後將它儲存。

?考

如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
259555? (http://support.microsoft.com/kb/259555/EN-US/ ) PRB: 時,就會發生錯誤開啟 XML 資料流上的 ADO 資料錄集
最新的 XML 下載和資訊,請參閱下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
http://msdn.microsoft.com/xml/default.asp (http://msdn.microsoft.com/xml/default.asp)

這篇文章中的資訊適用於:
  • Microsoft XML Parser 2.5
  • Microsoft XML Parser 2.6
  • Microsoft XML Parser 3.0
  • Microsoft XML Core Services 4.0
關鍵字:?
kbmt kbproductlink kbfaq kbinfo KB275883 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:275883? (http://support.microsoft.com/kb/275883/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。