Qual é o nome de codificação correto a ser usado na localidade para UTF-8?

7

Estou apenas pensando aqui como eu tenho neste sistema CentOS 7:

$ locale -a 
<snip>
en_US.utf8
<snip>

e ainda:

$ localectl 
System Locale: LANG=en_US.UTF-8

Para adicionar a isso, o nome preferido de acordo com o X11 (/usr/share/X11/locale/locale.dir) é:

$ grep 'en_US.UTF-8$' /usr/share/X11/locale/locale.dir 
en_US.UTF-8/XLC_LOCALE                  en_US.UTF-8
en_US.UTF-8/XLC_LOCALE:                 en_US.UTF-8

Felizmente para en_US.utf8, existe um alias:

$ grep 'en_US.utf8' /usr/share/X11/locale/locale.alias
en_US.utf8                                      en_US.UTF-8
en_US.utf8:                                     en_US.UTF-8

Alguns outros não têm tanta sorte, por exemplo ru_UA.utf8:

$ locale -a | grep ru_UA.utf8
ru_UA.utf8
$ grep 'ru_UA.utf8' /usr/share/X11/locale/locale.alias
$ grep 'ru_UA.UTF-8' /usr/share/X11/locale/locale.dir
en_US.UTF-8/XLC_LOCALE                  ru_UA.UTF-8
en_US.UTF-8/XLC_LOCALE:                 ru_UA.UTF-8

A razão pela qual isso é um pouco irritante se o código do idioma selecionado não estiver no X11 locale.alias é que o GDM (ou gnome-session?) força o uso da versão "utf8", quebrando programas X com mensagens como: "Warning : locale não suportado pelo Xlib, locale definido como C ". Eu poderia apenas editar /usr/share/X11/locale/locale.alias, mas seria interessante ter mais informações sobre qual versão está correta.

    
por lmz 26.02.2015 / 10:40

1 resposta

4

Comentários no estado das fontes GNU libc (intl / l10nflist.c: _nl_normalize_codeset):

There is no standard for the codeset names.

Nomes de codificadores são normalizados por essa função para todas as minúsculas com todos os caracteres não alfanuméricos removidos, ou seja, "UTF-8" se transforma em "utf8".

Os nomes de localidade dentro do arquivo local estão usando nomes de conjuntos de códigos normalizados.

Como não existe um padrão, o GDM está bem dentro do seu direito de usar "utf8" e locais como 'ru_UA.utf8' não são inválido . "utf8" pode não ser preferido, mas é definitivamente aceitável (pelo menos pelos padrões da libc), pois é a forma normalizada.

    
por 28.02.2015 / 16:50