同じロケール、異なる配布、一貫性のない動作

同じロケール、異なる配布、一貫性のない動作

私のシステムを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

Debian 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>/ e 80 af)を得ました。

私はNNBSPがフランス語のロケールの法的文字であることを知っています(以下を含むいくつかの情報源による)。ウィキペディア)しかし、これはPDFレポートを生成するときに私のアプリケーションの動作を変更します(対応する文字がすべてのフォントに存在するわけではありません)。

どの文字であるべきかについては、GNU / Glibc / JDKメーリングリストで多くの議論を見ましたが、どこで変更されたのかを見つけることができませんでした。Glibc 変更ログ

コード内のすべてのNNBSPを標準空間(または単にNBSP)に直接置き換えることでアプリケーションを変更できますが、これは少し混乱しているようです。ロケールファイルを変更して再コンパイルできますか?より良い解決策はありますか?

関連情報