Diferenças entre en_US.utf8 e en_US.UTF-8?

5

Eu tive um tempo terrível para fazer o zsh tocar bem com o Debian Jessie, e cheguei à conclusão de que meus problemas se originam da localidade do meu sistema. Correndo locale , vejo

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=

no entanto, /etc/default/locale contém LANG=en_US.UTF-8 , assim como /etc/environment , e meu arquivo /etc/locale.gen tem apenas en_US.UTF-8 UTF-8 descomentado.

  1. Por que locale informa algo (sutilmente) diferente de todas as outras opções do meu sistema e
  2. Como faço para configurar (consertar) coisas para fornecer "en_US.UTF-8" para cada opção de LC quando executo locale ?
por Connor Glosser 11.11.2015 / 17:05

1 resposta

8

O nome "correto" é UTF-8 . No entanto, o Linux glibc normalizará internamente o nome da codificação, convertendo-o em minúsculas & removendo a maioria dos caracteres especiais, então ambas as variantes funcionarão (desde que não escapem para os sistemas BSD).

Na maioria das vezes, o sufixo .utf8 em $ LANG vem do GNOME; afaik, isso foi corrigido em 3.18.

Mas como dito acima, tanto utf8 como UTF-8 funcionarão da mesma maneira no Linux glibc - o problema vem de outro lugar. Como você não escreveu qual é o problema , , aqui está uma lista de verificação geral:

  • Será que locale -a (localidades disponíveis) mostra qualquer variante ? . você gerou (com locale-gen ) as localidades depois de editar o locale.gen?

  • O ambiente do emulador de terminal tem as mesmas configurações de localidade? Use cat /proc/$(pidof xterm)/environ | tr \0 \n para verificar o ambiente de outro processo.

    (Frequentemente as pessoas tentam definir envios de localidade a partir de seus arquivos ~/.bashrc ou semelhantes, mas as variáveis de ambiente não se propagam "para cima", portanto, o resultado final.)

  • O que printf '\xe2\x99\xa5' produz? Se mostrar uma caixa ou ponto de interrogação, significa que a fonte não possui o caractere necessário. Se ele mostrar três caracteres de lixo, isso significa que seu terminal não tem o $ LANG correto (ou simplesmente não suporta UTF-8).

por 11.11.2015 / 17:54