Wie lautet der richtige Codierungsname für das Gebietsschema von UTF-8?

9

Ich frage mich hier nur, wie ich es auf diesem CentOS 7-System getan habe:

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

und doch:

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

Der bevorzugte Name gemäß X11 (/usr/share/X11/locale/locale.dir) lautet:

$ 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

Zum Glück für en_US.utf8 gibt es einen 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

Einige andere haben nicht so viel Glück, zB 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

Der Grund dafür ist etwas ärgerlich, wenn sich das ausgewählte Gebietsschema nicht im X11-Gebietsschema befindet. Alias ​​ist, dass GDM (oder Gnome-Sitzung?) Die Verwendung der "utf8" -Version erzwingt und X-Programme mit folgenden Meldungen unterbricht: "Warnung: Gebietsschema nicht unterstützt von Xlib, Gebietsschema auf C gesetzt ". Ich könnte einfach /usr/share/X11/locale/locale.alias bearbeiten, aber es wäre schön, mehr Informationen darüber zu haben, welche Version tatsächlich richtig ist.

lmz
quelle

Antworten:

5

Kommentare in GNU libc-Quellen (intl / l10nflist.c: _nl_normalize_codeset) geben Folgendes an:

Es gibt keinen Standard für die Codesatznamen.

Codesatznamen werden von dieser Funktion auf Kleinbuchstaben normalisiert, wobei alle nicht alphanumerischen Zeichen entfernt werden, dh "UTF-8" wird zu "utf8".

Die Gebietsschemanamen im Gebietsschemaarchiv verwenden normalisierte Codesatznamen.

Da es keinen Standard gibt, hat GDM durchaus das Recht, "utf8" zu verwenden, und Gebietsschemas wie "ru_UA.utf8" sind nicht ungültig . "utf8" ist möglicherweise nicht bevorzugt, aber es ist definitiv akzeptabel (zumindest nach libc-Standards), da es sich um die normalisierte Form handelt.

lmz
quelle
Es gibt keinen formalen Standard, aber es gibt eine Konvention, um die sich die Industrie zusammenschließt, dh für US-Englisch: us_US.UTF-8
fpmurphy
Das würde ich auch gerne denken, aber zumindest ein Teil der "Industrie" kann sich nicht an eine einzige Schreibweise für den UTF-8-Codesatz auf einer einzigen Seite in ihrem Handbuch halten: access.redhat.com/documentation/en- US / Red_Hat_Enterprise_Linux /… - Vielleicht benötigt das X11 locale.alias nur eine Art Platzhalter% .utf8 =% .UTF-8-Unterstützung.
lmz