/ / Quelle est l'utilisation du 'codage' dans l'en-tête XML? - xml, en-tête, codage de caractères

À quoi sert l’encodage dans l’en-tête XML? - xml, header, encodage de caractères

En regardant l'en-tête XML

<?xml version="1.0" encoding="UTF-16" standalone="no"?>

Ai-je raison de dire que le encoding attribut est

  • venir trop tard (vous ne pouvez pas le lire correctement à moins de connaître le codage ...)
  • redondant, donc source d’erreurs: il est trop facile de le remplacer par "Big5" tout en sauvegardant le fichier dans utf-8

Ou est-ce que cet attribut ne concerne pas le contenu du ruisseau?

Est-ce que je mélange les choses ici?

Réponses:

41 pour la réponse № 1

Comme vous l'avez dit, vous devez connaître le codage du fichier pour pouvoir lire le encoding attribut.

Cependant, il existe une heuristique qui peut facilement vous rapprocher du codage "réel" pour vous permettre de lire l'attribut de codage. Cela fonctionne, car le <?xml partie par définition ne peut contenir que des caractères de la plage ASCII (toutefois, ils sont codés).

Le standard XML même décrit le processus exact utilisé pour connaître le codage.

Et l’étiquette de codage n’est pas redondante non plus. Par exemple, si vous utilisez l’algorithme de la spécification XML pour savoir que certains codages basés sur ASCII (ou compatibles ASCII) sont utilisés encore besoin de lire le codage pour savoir lequel est réellement utilisé (les candidats valables seraient ASCII, utf-8, n’importe lequel des Codages ISO-8859- *, n'importe lequel des Les fenêtres-* encodages, KOI8-R et beaucoup, beaucoup d'autres). Pour le <?xml une partie elle-même, cela ne fera aucune différence, mais pour le reste du document, cela peut faire une énorme différence.

En ce qui concerne les fichiers XML mal étiquetés: oui, il est facile de les produire, toutefois: la spécification XML spécifie clairement que ces fichierssont mal formés et en tant que tels ne sont pas corrects XML. Les encodages incorrects doivent être signalés comme une erreur (tant qu'ils peuvent être détectés!). C’est donc le problème de quiconque produit le XML.


6 pour la réponse № 2

Vous avez tout à fait raison, cela ressemble à un étrangeconception. Cela ne fonctionne que parce que la déclaration XML utilise uniquement des caractères ASCII et que presque tous les codages sont des sur-ensembles d'ASCII. Si vous "êtes prêt à accepter quelque chose qui ne soit pas", par exemple EBCDIC, vous pouvez vérifier si le fichier commence par la représentation EBCDIC de "<?xml" est. Ce qui signifie que vous vous appuyez sur le niveau général de redondance dans l'en-tête du fichier, plutôt que sur l'attribut de codage lui-même. Comme beaucoup d'éléments XML, il est pragmatique et fonctionne, mais n'est pas particulièrement élégant.


2 pour la réponse № 3

Les analyseurs XML ne sont requis que pour supporter au moinsutf-8 et UTF-16. L'analyseur XML commence par essayer les codages basés sur la marque de nom d'octet (BOM), le cas échéant (pour UTF-16, UTF-32 et même utf-8 avec la nomenclature fictive). Si aucun n'est trouvé, alors l'analyseur utilisera les encodages codés sur un octet UTF-32, UTF-16, UTF-8, ASCII et autres. Ce n'est qu'alors qu'il verra l'attribut de codage et redémarrera l'analyse si nécessaire.


0 pour la réponse № 4

Je pense qu'en principe, vous pourriez avoir un point que le encoding instruction est "en retard" dans le fichier, cependant, la première ligne entière utilise uniquement des caractères de base. Autant que je sache, ceux-ci sont les mêmes dans presque tous les encodages, donc quel que soit le décodage utilisé, il sera lu <?xml ... ?> en tous cas.

Tout ce qui vient après cette Cependant, pourrait avoir de l'importance. Par exemple, le texte d'une section CDATA peut être codé en cyrillique.