私のシステムを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)に直接置き換えることでアプリケーションを変更できますが、これは少し混乱しているようです。ロケールファイルを変更して再コンパイルできますか?より良い解決策はありますか?