Comment afficher Unicode UTF-8 en Unicode?

12

J'ai des fichiers texte encodés en UTF-8 qui affichent d'étranges codes d'échappement dans Emacs. Par exemple, ce texte:

In ista quaestione primo exponam quid intelligendum est per hoc nomen 'Deus'; secundo, respondebo ad quaestionem.

Des émissions comme celle-ci dans Emacs:

entrez la description de l'image ici

Cela ne se produit que dans Emacs. D'autres éditeurs affichent correctement le texte. Comment puis-je résoudre ce problème?


Mise à jour 1

Si j'appelle revert-buffer-with-coding-systemet sélectionne utf-8le fichier, lisez-le correctement. Ainsi, comme Gilles l'a correctement deviné, Emacs ne détecte pas l'encodage des fichiers. Si j'ajoute le code ; -*- coding: utf-8 -*-au fichier, Emacs s'ouvre et l'affiche correctement.


Update 2

J'ai réencodé le fichier en "UTF-8 avec encodage BOM", et maintenant il s'affiche bien dans Emacs. Je ne sais pas quelle est la différence entre les deux types, mais Emacs semble ne connaître que le BOMed.

NVaughan
la source
Emacs ne reconnaît pas le fichier comme UTF-8. Quel est le contenu de votre fichier init? Quelle version d'Emacs utilisez-vous? Cela change-t-il quelque chose si vous démarrez Emacs avec emacs -qou emacs -Q?
Gilles 'SO- arrête d'être méchant'
Je n'ai aucun problème avec les autres fichiers UTF-8. J'utilise GNU Emacs 24.4.4. Aucune différence avec emacs -qou emacs -Q.
NVaughan
Ah, si cela fonctionne avec d'autres fichiers et dans une configuration vierge, la raison en est probablement que le fichier contient également quelque part de l'UTF-8 invalide. Laissez-moi voir comment dire avec Emacs ...
Gilles 'SO- arrête d'être méchant'
éventuellement lié: emacs.stackexchange.com/q/4100/2264
Sean Allred

Réponses:

10

Pour une raison quelconque, Emacs ne reconnaît pas le fichier comme UTF-8. Vous pouvez forcer Emacs à rouvrir le fichier au format UTF-8 en exécutant la commande C-x RET r( revert-buffer-with-coding-system) et en entrant utf-8.

La raison pour laquelle Emacs n'a pas reconnu ce fichier comme UTF-8 (mais en reconnaît d'autres) est probablement qu'il contient une séquence UTF-8 non valide. Cette séquence apparaîtra toujours comme une barre oblique inverse suivie de trois chiffres octaux avec une couleur différente (le escape-glyphvisage) après avoir réinterprété le fichier en UTF-8. Vous pouvez rechercher une telle séquence en exécutant C-M-s( isearch-regexp) et en recherchant

[^^@-~[:multibyte:]]

^@est entré en tapant C-q C-SPC(c'est le caractère ^ @ = 0, pas la séquence de deux caractères circumflex-at; le caractère avant c'est le caractère circonflexe).

Vous pouvez forcer Emacs à reconnaître le fichier comme UTF-8 en ajoutant une variable de fichier système de codage : mettez quelque chose comme -*-coding: utf-8-*-sur la première ligne, ou mettez quelque chose comme ça vers la fin du fichier (vous pouvez remplacer #par n'importe quel préfixe, mais Local Variables:et End:doit apparaissent exactement comme ceci avec les deux points de fuite):

# Local Variables:
# coding: utf-8
# End:

Emacs choisit l'encodage selon lequel les fichiers sont interprétés en fonction de plusieurs paramètres, principalement les environnements linguistiques et les variables auto-coding-alistet auto-coding-regexp-alist. Étant donné que vous avez le même problème avec ce fichier même lors de l'exécution emacs -Q, je pense que ce n'est pas un problème avec ces paramètres, mais avec le contenu du fichier.

Gilles 'SO- arrête d'être méchant'
la source
Si j'ouvre le fichier sans la variable de fichier système de codage (lorsque le fichier affiche à tort) et lancer la recherche regex, tous mes \342, \200, \230, etc. être sélectionné. Mais si je l'ouvre "correctement" (en utilisant la variable de codage), aucun résultat de recherche n'apparaît.
NVaughan
@NVaughan Hmmm. Ensuite, je ne comprends pas pourquoi ce fichier n'est pas reconnu comme UTF-8 alors que d'autres le sont (en particulier sous emacs -Q).
Gilles 'SO- arrête d'être méchant'
1

Il est tard pour répondre à la question sur la nomenclature, mais je le ferai quand même.

La marque d'ordre des octets (BOM) est une séquence de trois octets \ xef \ xbb \ xbf qui, au début d'un fichier, indique aux systèmes et aux applications que le contenu est codé en UTF-8. À proprement parler, ce sont des métadonnées, non traitées comme faisant partie du contenu.

La plupart des applications - Emacs en fait partie - honorent la nomenclature et écrivent tous les fichiers UTF-8 avec. D'autres applications peuvent l'honorer en lecture, mais pas l'écrire; et d'autres ne le savent pas et peuvent lancer un message d'erreur lorsqu'ils le rencontrent. En d'autres termes, la situation est désordonnée. Je préfère l'utiliser autant que possible.

Répondu délibérément
la source
-1

Pour les systèmes de type UNIX uniquement.

Dans de nombreux cas, la définition de codage simple dans ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

accompli avec

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

dans ~ / .profile devrait résoudre votre problème.

PS Après ces corrections, vous devez vous reconnecter dans votre session pour permettre aux modifications de devenir visibles.

Alioth
la source
Bien que ce que vous dites puisse être utile, cela ne semble pas répondre à cette question, car le problème ne concernait que certains fichiers utf-8.
JeanPierre
Supposons qu'après la définition stricte de l'encodage dans les fichiers de configuration, ce problème puisse disparaître pour tous les fichiers pour toujours :-)
Alioth