동일한 로케일, 다른 배포, 일관되지 않은 동작

동일한 로케일, 다른 배포, 일관되지 않은 동작

내 시스템을 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)으로 직접 대체하여 애플리케이션을 수정할 수 있지만 이는 약간 혼란스러운 것 같습니다. 로케일 파일을 수정하고 다시 컴파일할 수 있을까요? 더 나은 해결책이 있습니까?

관련 정보