Question Différences entre en_US.utf8 et en_US.UTF-8?


J'ai eu du mal à faire en sorte que zsh joue bien avec Debian Jessie, et j'en viens à la conclusion que mes problèmes proviennent tous de la locale de mon système. Fonctionnement locale, Je vois

LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

toutefois /etc/default/locale contient LANG=en_US.UTF-8 de même que /etc/environment, et mon /etc/locale.gen fichier seulement a en_US.UTF-8 UTF-8 sans commentaire

  1. Pourquoi locale signaler quelque chose (subtilement) différent de toute autre option sur mon système, et
  2. Comment puis-je configurer (corriger) les choses à donner à "en_US.UTF-8" pour chaque option LC lorsque je cours locale?

5
2017-11-11 16:05


origine




Réponses:


Le nom propre est UTF-8. Cependant, Linux glibc va normaliser en interne le nom de l’encodage, en le convertissant en minuscules et en supprimant la plupart des caractères spéciaux, de sorte que les deux variantes fonctionneront (tant qu’elles n’échappent pas aux systèmes BSD).

La plupart du temps le .utf8 le suffixe dans $ LANG provient de GNOME; Et pourtant, cela a été corrigé en 3.18.

Mais comme dit ci-dessus, les deux utf8 et UTF-8 fonctionnera de la même manière sur Linux glibc - le problème vient d’ailleurs. Puisque vous n'avez pas écrit ce que le problème est, voici une liste de contrôle générale:

  • Est-ce que locale -a (locales disponibles) affiche l'une ou l'autre variante du tout? C'est à dire. Avez-vous généré (avec locale-gen) les locales après modification de locale.gen?

  • Est-ce que le émulateur de terminal environnement ont les mêmes paramètres régionaux? Utilisation cat /proc/$(pidof xterm)/environ | tr \\0 \\n vérifier l'environnement d'un autre processus.

    (Souvent, les gens essaient de définir des envvars de paramètres régionaux ~/.bashrc ou des fichiers similaires, mais les variables d'environnement ne se propagent pas "vers le haut", donc le résultat final.)

  • Qu'est ce que printf '\xe2\x99\xa5' sortie? Si ça se voit un boîte ou un point d'interrogation, cela signifie que la police n'a pas le caractère nécessaire. Si ça se voit Trois caractères de rebut, cela signifie que votre terminal n'a pas le bon $ LANG (ou ne supporte tout simplement pas UTF-8).


8
2017-11-11 16:54



Ah d'accord! Merci! Cela éclaire un peu plus les choses pour moi. Le problème qui a démarré était un problème avec zsh ne rendant pas correctement les caractères de dessin en boîte; Je vois juste une chaîne massive de characters caractères de remplacement à la place. Fonctionnement locale -a affiche uniquement les variantes minuscules, même après avoir tout recréé explicitement. L'émulateur de terminal a les paramètres que j'attendrais (c'est-à-dire en_US.UTF-8), et la sortie de printf me montre un petit cœur. - Connor Glosser
Cela ressemble plutôt à la la source de ces caractères de dessin de boîte n’est pas réellement encodé en UTF-8 (peut-être que votre ~ / .zshrc a été enregistré dans cp437?) Testez l’émulateur de terminal directement en utilisant printf '┌┘' et printf '\xe2\x94\x8c\xe2\x94\x98\n', ou peut-être cat une fichier de démonstration. - grawity
J'ai essayé de supprimer mon ~ / .zshrc et de définir les options appropriées (prompt adam2 8bit) directement depuis l'invite afin d'éviter tout problème avec l'encodage d'un fichier de paramètres, mais j'ai toujours le même problème. Ce qui est particulièrement étrange, car catLe fichier de démonstration est parfaitement rendu - même les caractères de dessin à la fin du fichier! - Connor Glosser