我正在将python应用程序从具有区域设置en_US.UTF-8的ubuntu服务器迁移到新的Debian服务器,该服务器默认已经设置了C.UTF-8。我试图了解是否会有影响,但无法在互联网上找到好的资源来了解两者之间的区别。
答案 0 :(得分:9)
出于某些原因,我在LC_TIME=C.UTF-8
中添加了/etc/default/locale
的某些原因:
对于HTML输入类型=时间(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time),它在Firefox中提供了24小时时钟,而不是AM / PM,并为DD / MM / YYYY而不是MM / DD / YYYY格式使用了日期选择器HTML输入类型=日期(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date)。
当在Thunberbird中回复电子邮件时,它允许使用带有24小时制的YYYY-MM-DD日期格式。
以前,LC_TIME=en_DK.UTF-8
(http://kb.mozillazine.org/Date_display_format)可以实现,但是目前存在一个错误,并且停止了工作(https://bugzilla.mozilla.org/show_bug.cgi?id=1426907#c155)。
答案 1 :(得分:1)
通常C
用于计算机,en_US
用于在美国讲英语的人(以及其他想要相同行为的人)。
用于计算机的 表示字符串有时会更加标准化(但仍使用英语),因此可以从其他程序中读取程序的输出。使用en_US
,可以改善字符串,可以改善字母顺序(也许通过芝加哥新的风格规则等)。因此更加人性化,但可能不太稳定。注意:语言环境不仅用于字符串翻译,还用于排序规则(字母顺序,数字(例如千位分隔符),货币(我认为可以安全地预测$和2个十进制数字会保留),月份,星期几等
在您的情况下,这只是两种语言环境的UTF-8版本。
一般来说没关系。我通常更喜欢en_US.UTF-8,但通常并不重要,在您的情况下(服务器应用程序),它只应更改日志和错误消息(如果使用locale.setlocale()
。应在内部处理客户端语言环境您的应用程序。从其他程序读取的程序应在打开管道之前设置C
,因此实际上没有关系。
如您所见,可能没关系。您也可以使用POSIX
语言环境,也可以在Debian中定义。您可以使用locale -a
来获取已安装语言环境的列表。
注意:微观优化将规定C
/ C.UTF-8
区域设置:不翻译文件(gettext
),并且不使用简单的排序规则和数字格式规则,但这仅在服务器端。
答案 2 :(得分:0)
可能会产生一些影响,因为它们在排序顺序,大小写关系,排序规则,数千个分隔符,默认货币符号等方面会有所不同。
C.utf8 =符合POSIX标准的默认语言环境。仅严格的ASCII字符有效,已扩展为允许UTF-8的基本使用
en_US.utf8 =美国英语UTF-8语言环境。
尽管我不确定您可能会遇到的具体效果,但是我相信您可以根据需要在应用程序内部设置区域设置和编码。
答案 3 :(得分:0)
我可以确认对不同的语言环境有影响(C.UTF8 与 en_US.UTF8)。我最近将一个 Python 程序部署到了一台新服务器中,但它的表现有所不同。新旧服务器都是 Ubuntu 18 服务器,唯一的区别是语言环境(C.UTF8 vs en_US.UTF8)。将新服务器中的语言环境设置为 C.UTF8 后,它们现在的行为相同。
在 Linux 环境中为单个应用程序设置语言环境很容易。您只需在申请前添加 export LANG=C.UTF8;
。假设您以 python myprogram.py
的身份执行应用程序,然后输入:
export LANG=C.UTF8; python myprogram.py