どういうわけか、有効なWindows-1252 XMLをロードするときに、以下のコードがエラーを生成することがあります。
MSXML6を使用するWindowsXPProfessionalx86SP3では失敗します。
これは、MSXML6を使用するWindows 7 Ultimatex64SP1で成功します。
注:以下のコードはDelphiで記述されていますが、同等のコードは他の環境でも失敗します。
procedure TXMLEOSErrorTestCase.Test;
var
XmlDocument: IXMLDOMDocument3;
XmlFileName: string;
begin
XmlDocument := CoFreeThreadedDOMDocument60.Create();
XmlFileName := TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), '1-Normal.xml');
if not XmlDocument.load(XmlFileName) then
Parse(XmlDocument.parseError);
end;
このエラーは、XmlDocument.loadメソッド中に発生します。
reason: System error: -2146697210.
errorCode: -2146697210
url: C:\temp\1-Normal.xml
XMLを以下のXMLにトリミングしました。
これは、XMLファイルの16進ダンプです。
000000: 3C 3F 78 6D 6C 20 76 65 72 73 69 6F 6E 20 3D 20 <?xml version =
000010: 22 31 2E 30 22 20 65 6E 63 6F 64 69 6E 67 3D 22 "1.0" encoding="
000020: 57 69 6E 64 6F 77 73 2D 31 32 35 32 22 3F 3E 3C Windows-1252"?><
000030: 52 4F 57 20 43 69 74 79 3D 22 E0 22 2F 3E 0D 0A ROW City="."/>..
これはXMLです:
<?xml version = "1.0" encoding="Windows-1252"?><ROW City="à"/>
エラーが発生するのはなぜですか?
(XMLは、MSXML6を使用しない.NETおよびその他の環境で完全に正常にロードされます。Windows7Ultimate x64 SP1でも正常に動作します)。
--jeroen