D'une certaine façon, le code ci-dessous génère parfois une erreur lors du chargement d'un fichier XML Windows-1252 valide.Erreur lors du chargement du document Windows-1252 valide "Erreur système: -2146697210"
Il échoue sur Windows XP Professionnel x86 SP3 en utilisant MSXML6.
Il réussit sur Windows 7 Ultimate x64 SP1 en utilisant MSXML6.
Remarque: le code ci-dessous est écrit en Delphi, mais le code équivalent échoue également dans d'autres environnements.
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;
Cette erreur se produit au cours de la méthode XmlDocument.Load:
reason: System error: -2146697210.
errorCode: -2146697210
url: C:\temp\1-Normal.xml
Je rognée XML vers le XML trouve ci-dessous.
Ceci est le vidage hexadécimal du fichier XML:
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="."/>..
C'est le XML:
<?xml version = "1.0" encoding="Windows-1252"?><ROW City="à"/>
Pourquoi se produit l'erreur?
(Le XML se charge parfaitement dans .NET et d'autres environnements n'utilisant pas MSXML6, il fonctionne également très bien sur Windows 7 Ultimate x64 SP1).
--jeroen
Les codes d'erreur comme ceux-ci sont plus communément écrits en hexadécimal: ** 800C0006 **.Cela signifie que "le système ne peut pas localiser l'objet spécifié". (C'est la limite de ce que je sais.) L'encodage est-il pertinent pour le problème, je me demande? Que faire si vous spécifiez un encodage différent? Que faire si vous gardez l'encodage que vous avez maintenant, mais utilisez uniquement des caractères ASCII? –
Voilà la chose: c'est une combinaison de ce caractère et de l'encodage. Et cela fonctionne dans Windows 7. Il en va de même pour la version MSXML6. J'étudie les numéros de version maintenant. Résumera quand fini (probablement demain) –