INFO : Le codage XML et les méthodes d’Interface DOM


Résumé


Le principal avantage des données de langage de balisage Extensible (XML) est qu’il est indépendant de la plate-forme. Cependant, le codage correct est obligatoire pour assurer le transfert correct des données XML entre différentes plates-formes. Le livre blanc « Coder des données de XML » résout les problèmes généraux d’encodage XML en détail :
Dans la plupart des cas, les erreurs de codage XML issus de différent paramètres des méthodes de Microsoft XML parser (MSXML) et des interfaces de codage par défaut. Une bonne compréhension de ces paramètres par défaut aidera à éviter les erreurs de codage.

Plus d'informations


Codages XML

MSXML prend en charge tous les codages pris en charge par Microsoft Internet Explorer. Dépend de la prise en charge d’Internet Explorer sur les modules linguistiques qui sont installés sur l’ordinateur ; Cette information est stockée sous la clé de Registre suivante :
HKEY_CLASSES_ROOT\MIME\Database\Charset
MSXML est prise en charge native pour les encodages suivants :
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
Il reconnaît également (en interne à l’aide de la fonction d’API WideCharToMultibyte pour les mappages) les encodages suivants :
US-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
WINDOWS-1250
WINDOWS-1251
WINDOWS-1252
WINDOWS-1253
WINDOWS-1254
WINDOWS-1255
WINDOWS-1256
WINDOWS-1257
WINDOWS-1258
L’emplacement correct pour spécifier le codage des données est la déclaration XML. Par exemple, si les données sont codées avec le standard de l’ISO-8859-1, vous pouvez spécifier cela comme suit :
<?xml version="1.0" encoding="ISO-8859-1"?>
Sans cette information, l’encodage par défaut est UTF-8 ou UTF-16, en fonction de la présence d’une marque d’ordre d’octet UNICODE (BOM) au début du fichier XML. Si le fichier démarre avec une marque d’ordre d’octet UNICODE (0xFF 0xFE) ou (0xFE 0xFF), le document est considéré comme étant dans le codage UTF-16 ; dans le cas contraire, il est au format UTF-8. La méthode Save de l’interface IXMLDOMDocument gère le codage d’origine du document. La valeur par défaut de cette méthode est UTF-8.

Erreurs de DOM MSXML

Deux erreurs courantes renvoyées par les méthodes de l’interface de modèle DOM (Document objet MODEL) XML sont les suivants :
Un caractère non valide a été trouvé dans le contenu de texte.
- et -
Passage du codage actuel au codage spécifié non pris en charge.
Avec la méthode load de l’interface IXMLDOMDocument , ces erreurs se produisent généralement dans les conditions suivantes :
  • Aucun codage n’est spécifié, aucune marque d’ordre d’octet se trouve au début du fichier XML et les données contient des caractères spéciaux
  • Le codage spécifié ne correspond pas au codage réel des données XML.
Il est conseillé de toujours spécifier le bon codage dans la déclaration XML, plutôt que d’accepter le codage par défaut.

Avec l’analyseur MSXML versions 2.5, 2.5 SP1 et 2.6, la méthode loadXML de IXMLDOMDocument peuvent uniquement charger UTF-16 ou données de codés en UCS-2. Toute tentative de charger des données XML qui sont codées à l’aide d’un autre codage présenter les résultats dans le message d’erreur suivant :
Passage du codage actuel au codage spécifié non pris en charge.
Avec la version de MSXML 3.0 (Msxml3.dll), cette restriction est supprimée, et le code suivant s’exécute sans erreur :
hr = pXMLDoc->loadXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?><tag1>Abcdef</tag1>");
REMARQUE: la propriété xml de l’interface IXMLDOMDocument écrit les données XML en tant que UTF-16 codés mais sans la marque d’ordre d’octet au début. Cela peut entraîner des problèmes de codage.

Vous pouvez également recevoir ces erreurs lorsque vous appelez la méthode transformNode de l’interface IXMLDOMNode avec un fichier XSL ou XSLT dans lequel les informations de codage XML est spécifié comme suit :
<xsl:output method="xml" encoding="UTF-8" />
La méthode transformNode retourne un BSTR qui est par définition de données codée UTF-16. Pour conserver le codage le mieux est d’appeler les
banque et méthode de transformNodeToObject les résultats dans un flux ou un nouveau fichier XML de document et de l’enregistrement.

Références


Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

259555 PRB : erreur se produit lorsque vous ouvrez un jeu d’enregistrements ADO sur le flux de données XML
Pour le dernier transfert XML et des informations, consultez le site Web Microsoft Developer Network (MSDN) suivant :