Windows 7 UTF-8 et Unicode

Quelqu'un pourrait-il expliquer ce qui a changé dans Windows 7 (Pro 64-bit)?

Détails: Auparavant, j'avais Windows XP et j'avais des fichiers de traduction (UTF-8 encodé) au format CSV. J'ai pu voir les polices dans Bloc-notes et Excel. Après la mise à niveau vers Windows 7, lorsque j'ouvre ces fichiers – tout ce que je vois est une case carrée (vous le savez, si je les ouvre dans le navigateur – j'ai pu voir toute la traduction). Si je sauvegarde ces fichiers dans Unicode, tout semble être bien.

Alors, qu'est-ce qui se passe exactement? Pourquoi Windows 7 fonctionne-t-il avec Unicode et non avec UTF-8?

    Pourquoi Windows 7 fonctionne-t-il avec Unicode et non avec UTF-8?

    Terminologie

    Unicode et UTF-8 ne sont pas le même genre de chose: Unicode est un jeu de caractères qui définit un ensemble de caractères (un répertoire) et attribue des nombres (points de code) à chacun de ces caractères. UTF-8 est l'un des nombreux encodages qui peuvent être utilisés pour représenter un flux de caractères Unicode sur disque ou en transmission. Le même flux de caractères Unicode pourrait également être codé en UTF-16, UTF-32 ou UTF-7, par exemple.

    Toutefois, Notepad vous propose des options de "codage", y compris ANSI , Unicode , Unicode big-endian et UTF-8 . Tram DaFddMachachélmetteAachachachageaMachinachmachinachachagea aleea aleea Daeaddice Daea DaeaddMMMTMTTTufchasdachel Quand ils disent "Unicode", ils signifient probablement " UTF-16 little-endian ". Quand ils disent "ANSI", ils désignent le Code Page 1252 (CP-1252).

    Bloc-notes Microsoft

    Je crois que le Bloc-notes de Microsoft écrit UTF-16 avec une marque de commande d'octet ( BOM ) et que le Bloc-notes recherche la nomenclature lors de la lecture d'un fichier texte. La nomenclature indique à l'application que le fichier est UTF-16 et indique s'il est grand-énon ou petit-énonci.

    Si le Bloc-notes ne trouve pas la nomenclature, il appelle une fonction de bibliothèque IsTextUnicode , qui examine les données et tente de deviner quel encodage a été utilisé. Ddddddddice DawoFddddice DawoFdddice DawoFdddice DawoFdddice DafewoFMachachagesTemettem DaHMMMMMMMemjasA Parfois, cela suppose qu'un fichier "ANSI" est "Unicode". En essayant d'interpréter un fichier UTF-16 ou UTF-8 comme code Page 1252, cela pourrait provoquer l'affichage des glyphes incorrects et ne pas pouvoir trouver de glyphes pour générer des valeurs de 8 bits. Ceux-ci seraient alors représentés en carrés.

    Comme le dit Harrymc dans sa réponse , il existe de meilleures solutions de rechange au Bloc-notes. Mais Notepad vous permet de choisir explicitement l'encodage lors de l'ouverture d'un fichier (plutôt que de quitter le bloc-notes pour essayer de deviner).

    Marquage des octets

    Selon le consortium Unicode, les marques de commande d'octet (nomenclatures) sont facultatives. Toutefois, Windows s'appuie sur les nomenclatures pour distinguer certains encodages.

    Bref, peut-être que vos fichiers manquaient d'une nomenclature pour une raison quelconque? Peut-être que la nomenclature a été perdue au cours du processus de mise à niveau?

    Si vous avez toujours les fichiers originaux qui s'affichent comme des carrés, vous pouvez en faire une décharge hexagonale pour voir si elles contiennent une nomenclature.


    Normes de fichier texte simple

    Le problème est qu'il n'y a effectivement aucun – pas de normes universelles pour les fichiers texte. Au lieu de cela, nous avons un certain nombre d'incompatibilités et d'inconnues.

    • Comment les lignes ont-elles été marquées? Certaines plates-formes utilisent les caractères de commande Carriage Return (CR) suivis de Line Feed (LF), certains utilisent CR seul et certains utilisent LF seul.

    • Les terminateurs ou séparateurs ci-dessus sont-ils? Cela a un effet à la fin d'un fichier et il a été connu pour causer des problèmes.

    • Traitement des onglets et autres caractères de contrôle. Nous pourrions supposer qu'un onglet est utilisé pour s'aligner sur un multiple de 8 largeurs de caractères standard depuis le début de la ligne, mais il n'y a pas de certitude. De nombreux programmes permettent de modifier les positions des onglets.

    • Ensemble de caractères et encodage? Il n'existe pas de norme universelle pour indiquer lequel de ces éléments a été utilisé pour le texte dans le fichier. Le plus proche que nous ayons est de rechercher la présence d'une nomenclature qui indique que le codage est l'un de ceux utilisés pour Unicode. À partir de la valeur de la nomenclature, le programme de lecture du fichier peut distinguer entre UTF-8 et UTF-16, etc., et entre les variantes Little-Endian et Big-Endian de UTF-16, etc. Il n'existe pas de norme universelle pour indiquer qu'un fichier Est encodé dans n'importe quel autre codage populaire tel que CP-1252 ou KOI-8.

    Etc. Aucune des métadonnées ci-dessus n'est écrite dans le fichier texte – de sorte que l'utilisateur final doit informer le programme lors de la lecture du fichier. L'utilisateur final doit connaître les valeurs de métadonnées pour tout fichier spécifique ou risquer que son programme utilise les mauvaises métadonnées.

    Bush a caché les faits

    Essayez ceci sur Windows XP.

    • Ouvrez le Bloc-notes.
    • Ddddéldice à exploidence illustrassodeteradidence illustrddice Marco illustrdddddddddddjoydetteúdicedettedeterdeteradas (Vous devrez peut-être l'installer d'abord, si vous ne le voyez pas dans le menu, cliquez sur "Afficher plus de polices".)
    • Entrez le texte "Bush caché les faits".
    • Choisissez Save As . Dans le menu Encoding , sélectionnez ANSI .
    • Fermer le Bloc-notes.
    • Réouvertez le document (par exemple, en utilisant Start , My Recent Documents ).
    • Vous verrez 畂 桳 栠 摩 琠 敨 映 捡 獴 au lieu de "Bush caché les faits".

    Ceci illustre que la fonction IsTextUnicode utilisée par le Bloc-notes IsTextUnicode que le IsTextUnicode ANSI (vraiment Code Page 1252) est Unicode UTF-16LE sans nomenclature. Il n'y a pas de nomenclature dans un fichier enregistré en tant que ANSI .

    Windows 7

    Avec Windows 7, Microsoft a ajusté IsTextUnicode sorte que ce qui précède n'arrive pas. Dans l'absence de nomenclature, il est maintenant plus susceptible de deviner ANSI (CP 1252) que Unicode (UTF-16LE). Avec Windows 7, je m'attends à ce que vous soyez plus susceptibles d'avoir le problème inverse: un fichier contenant des caractères Unicode avec des points de code supérieur à 255, mais sans BOM, est maintenant plus susceptible d'être considéré comme ANSI – et donc affiché de manière incorrecte.

    Prévenir les problèmes d'encodage

    À l'heure actuelle, la meilleure approche semble être l'utilisation de l'UTF-8 partout. Idéalement, vous devez coder à nouveau tous les anciens fichiers texte dans UTF-8 et sauvegarder uniquement les fichiers texte comme UTF-8. Il existe des outils tels que recode et iconv qui peuvent vous aider.

    Une remarque: vous pouvez utiliser Notepad ++ pour afficher ces fichiers, en utilisant le menu Encodage.

    Une fois que les fichiers sont affichés correctement, les enregistrer ajouteront la nomenclature correcte.