UTF-8의 로케일에서 사용할 올바른 인코딩 이름은 무엇입니까?

UTF-8의 로케일에서 사용할 올바른 인코딩 이름은 무엇입니까?

CentOS 7 시스템에서 내 상황이 어떤지 궁금합니다.

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

하지만:

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

그렇지 않은 경우 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

다행히 en_US.utf8에는 다음과 같은 별칭이 있습니다.

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

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

선택한 로케일이 X11 locale.alias에 없으면 GDM(또는 gnome-session?)이 "utf8" 버전을 강제로 적용하여 다음 메시지와 함께 X 프로그램을 중단시키기 때문에 이는 약간 성가신 일이 될 수 있습니다. "Xlib에서 지원, 로캘이 C로 설정됨"이 존재합니다. i.할 수 있다/usr/share/X11/locale/locale.alias를 편집하기만 하면 됩니다. 그러나 어떤 버전이 실제로 올바른지에 대한 자세한 정보가 있으면 좋을 것입니다.

답변1

GNU libc 소스 코드의 주석 상태(intl/l10nflist.c:_nl_normalize_codeset):

코드 세트 이름에 대한 표준은 없습니다.

이 기능은 코드 세트 이름을 모두 소문자로 정규화하고 영숫자가 아닌 모든 문자를 제거합니다. 즉, "UTF-8"은 "utf8"이 됩니다.

로케일 아카이브 내의 로케일 이름은 정규화된 코드 세트 이름을 사용합니다.

표준이 없기 때문에 GDM에는 "utf8"을 사용할 수 있는 모든 권한이 있지만 "ru_UA.utf8"과 같은 로케일은 사용할 수 없습니다.유효하지 않은. "utf8"은 선호되지 않을 수도 있지만 표준화된 형식이기 때문에 확실히 허용됩니다(적어도 libc 표준에 따르면).

관련 정보