web-dev-qa-db-fra.com

Quels personnages ne mappent pas directement de Cp1252 à UTF-8?

J'ai lu dans plusieurs réponses stackoverflow que certains caractères ne sont pas directement mappés (ou sont même "non mappables") lors de la conversion de Cp1252 (autrement dit Windows-1252; ce sont les mêmes, n'est-ce pas?), En UTF-8, par exemple ici: https://stackoverflow.com/a/23399926/2018047

Quelqu'un peut-il s'il vous plaît éclairer un peu plus sur ce sujet? Cela signifie-t-il que si je convertis par lots/en masse le code source de cp1252 en utf-8, j'obtiendrai des caractères qui finiront comme des ordures?

5
Christian

Voilà à quoi ressemble la page de codes Windows 1252.

Comme vous pouvez le voir, les octets 0x81, 0x8D, 0x8F, 0x90, 0x9D ne sont pas affectés.

Si votre fichier d'entrée contient ces octets et que vous le traitez comme s'il s'agissait d'un codage Windows 1252, ces octets seront traités comme des caractères non valides. Dans des circonstances normales, cela signifie que le fichier d'entrée n'était pas dans Windows 1252.

Tous les autres octets codent des caractères imprimables ou des caractères de contrôle. Tous ces caractères sont présents dans Unicode et peuvent donc être codés sans ambiguïté dans UTF-8.

Je n'ai aucune idée de ce que la réponse liée tente de revendiquer, son dernier paragraphe sonne comme un non-sens.

Plusieurs autres remarques, qui peuvent éclairer un peu ce que vous essayez de savoir:

  • UTF-8 et Windows 1252 sont totalement incompatibles en dehors de l'ASCII

  • ces deux encodages ne coderont jamais le texte en certaines valeurs d'octet, différentes les unes des autres

  • de plus, certains octets séquences sont également invalides dans UTF-8

  • en général, si vous traitez un fichier comme s'il contenait du texte codé en UTF-8 ou Windows 1252, mais que ce ne soit pas le cas, vous perdrez et corrompriez des données.

Vous pouvez sélectionner le codage de vos fichiers dans votre IDE ou votre éditeur. Il est recommandé d’utiliser le format UTF-8 uniquement. Vous devrez convertir les fichiers Windows 1252 existants.

10
Karol S

La fonction cp1252 décodage est principalement une fonction d’identité.

cp1252    UCP       (UCP = Unicode Code Point)
--------  --------
21        21 (!)    (All numbers in hex)
31        31 (1)
41        41 (A)

Cela fait en sorte que semble comme quelque chose d’attendu, UCP (et non UTF-8) acceptera également cp1252. L'auteur de la réponse liée fait remarquer que ce n'est pas le cas.

cp1252    UCP
--------  --------
80        20AC (€)
85        2026 (…)
99        2122 (™)

Les exceptions sont toutes comprises entre 80 et 9F, inclus.

Quelque chose qui accepte UCP acceptera également iso-8859-1 , mais pas cp1252.

1
ikegami