내 시스템을 CentOS 6.9 VM에서 Debian 10 Docker 컨테이너로 마이그레이션했는데 천 단위 구분 기호가 왜 다른지 설명할 수 없습니다. 동일한 로캘(fr_FR.UTF-8), 동일한 버전의 로캘이지만 구분 기호가 다릅니다.
CentOS 6.9 가상 머신:
[user@host ~]$ cat /etc/redhat-release
CentOS release 6.9 (Final)
[user@host ~]$ locale -v -a fr_FR.UTF-8 | grep -A10 fr_FR.utf8
locale: fr_FR.utf8 archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
title | French locale for France
source | RAP
contact | Traduc.org
email | [email protected]
language | French
territory | France
revision | 1.0
date | 2008-03-15
codeset | UTF-8
[user@host ~]$ yum list installed | grep libc
glibc.x86_64 2.12-1.209.el6_9.2 @updates
glibc-common.x86_64 2.12-1.209.el6_9.2 @updates
glibc-devel.x86_64 2.12-1.209.el6_9.2 @updates
glibc-headers.x86_64 2.12-1.209.el6_9.2 @updates
[...]
[user@host ~]$ grep "thousands_sep" /usr/share/i18n/locales/fr_FR
mon_thousands_sep "<U0020>"
thousands_sep "<U0020>"
[user@host ~]$ LC_NUMERIC="fr_FR" printf "%'.f\n" 1234 | hexdump -C
00000000 31 20 32 33 34 0a |1 234.|
00000006
데비안 10 컨테이너:
root@240c7f7ca3a1:~# cat /etc/issue.net
Debian GNU/Linux 10
root@240c7f7ca3a1:~# locale -v -a fr_FR.UTF-8 | grep -A10 fr_FR.utf8
locale: fr_FR.utf8 archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
title | French locale for France
source | RAP
contact | Traduc.org
email | [email protected]
language | French
territory | France
revision | 1.0
date | 2008-03-15
codeset | UTF-8
root@240c7f7ca3a1:~# apt list --installed | grep libc
libc-bin/stable,now 2.28-10 amd64 [installé, automatique]
libc-l10n/stable,now 2.28-10 all [installé, automatique]
libc6/stable,now 2.28-10 amd64 [installé]
[...]
root@240c7f7ca3a1:~# grep "thousands_sep" /usr/share/i18n/locales/fr_FR
mon_thousands_sep "<U202F>"
thousands_sep "<U202F>"
root@240c7f7ca3a1:~# LC_NUMERIC="fr_FR" printf "%'.f\n" 1234 | hexdump -C
00000000 31 e2 80 af 32 33 34 0a |1...234.|
00000008
보시다시피, 첫 번째 경우에는 일반 공간( <U0020>
/20)을 얻었고, 후자의 경우 깨지지 않는 좁은 공간( <U202F>
/e2 80 af)을 얻었습니다.
나는 NNBSP가 프랑스어 로케일의 법적 문자라는 것을 알고 있습니다(다음을 포함한 여러 출처에 따르면).위키피디아), 그러나 이로 인해 PDF 보고서를 생성할 때 내 응용 프로그램의 동작이 변경됩니다(해당 문자가 모든 글꼴에 존재하는 것은 아닙니다).
어떤 문자여야 하는지에 대해 GNU/Glibc/JDK 메일링 리스트에서 많은 토론을 보았지만 어디에서 변경되었는지 찾을 수 없습니다.Glibc 변경 로그.
코드에서 모든 NNBSP를 표준 공간(또는 단순히 NBSP)으로 직접 대체하여 애플리케이션을 수정할 수 있지만 이는 약간 혼란스러운 것 같습니다. 로케일 파일을 수정하고 다시 컴파일할 수 있을까요? 더 나은 해결책이 있습니까?