C.UTF-8和en_US.UTF-8语言环境有什么区别?

时间:2019-04-14 09:42:24

标签: python linux docker debian locale

我正在将python应用程序从具有区域设置en_US.UTF-8的ubuntu服务器迁移到新的Debian服务器,该服务器默认已经设置了C.UTF-8。我试图了解是否会有影响,但无法在互联网上找到好的资源来了解两者之间的区别。

4 个答案:

答案 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-8http://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