C.UTF-8 和 en_US.UTF-8 语言环境有什么区别?
What is the difference between C.UTF-8 and en_US.UTF-8 locales?
我正在将 python 应用程序从语言环境 en_US.UTF-8 的 ubuntu 服务器迁移到已设置 C.UTF-8 的新 debian 服务器默认。我试图了解是否会有任何影响,但无法在互联网上找到好的资源来了解两者之间的区别。
可能会有一些影响,因为它们在排序顺序、大小写关系、归类顺序、千位分隔符、默认货币符号等方面有所不同。
C.utf8 = POSIX 符合标准的默认语言环境。只有严格的 ASCII 字符有效,扩展为允许基本使用 UTF-8
en_US.utf8 = 美国英语 UTF-8 语言环境。
虽然我不确定您可能遇到的具体效果,但我相信您可以根据需要在应用程序中设置语言环境和编码。
一般来说,C
用于计算机,en_US
用于美国讲英语的人(以及其他想要相同行为的人)。
for computer 意味着字符串有时更标准化(但仍然是英文),因此可以从另一个程序读取一个程序的输出。使用 en_US
,字符串可以改进,字母顺序可以改进(可能通过芝加哥风格规则的新规则等)。因此更加用户友好,但可能不太稳定。注意:语言环境不仅用于字符串的翻译,还用于整理(字母顺序、数字(例如千位分隔符)、货币(我认为预测 $ 和 2 个小数位将保留是安全的)、月份、星期几等
在您的情况下,它只是两个语言环境的 UTF-8 版本。
一般来说应该没有关系。我通常更喜欢 en_US.UTF-8,但通常这并不重要,在你的情况下(服务器应用程序),它应该只更改日志和错误消息(如果你使用 locale.setlocale()
。你应该处理客户端你的应用程序中的语言环境。从其他程序读取的程序应该在打开管道之前设置 C
,所以这应该无关紧要。
如您所见,这可能并不重要。您也可以使用 POSIX
区域设置,也在 Debian 中定义。您可以使用 locale -a
.
获取已安装语言环境的列表
注意:微优化将规定 C
/C.UTF-8
语言环境:没有文件翻译 (gettext
),以及关于排序规则和数字格式的简单规则,但这应该是可见的仅在服务器端。
以下是我在 /etc/default/locale
中添加 LC_TIME=C.UTF-8
的一些原因,以防对某人有所帮助:
它在 Firefox 中为 HTML5 input type=time (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time) and uses a datepicker in the format DD/MM/YYYY instead of MM/DD/YYYY for HTML5 input type=date (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date) 提供了一个 24 小时制而不是 AM/PM。
它允许在回复 Thunberbird 中的电子邮件时使用 YYYY-MM-DD 国际日期格式 (ISO 8601) 和 24 小时制。
以前,可以使用 LC_TIME=en_DK.UTF-8
(http://kb.mozillazine.org/Date_display_format) but there is a bug currently and it stopped working (https://bugzilla.mozilla.org/show_bug.cgi?id=1426907#c155)。
编辑:现在即使 LC_TIME=C.UTF-8
解决方法也不适用于 Thunberbird:https://bugzilla.mozilla.org/show_bug.cgi?id=1426907#c197
我可以确认对不同的区域设置有影响(C.UTF8 vs en_US.UTF8)。我最近将一个 python 程序部署到一台新服务器中,它的表现有所不同。新旧服务器都是Ubuntu18台服务器,唯一的区别是语言环境(C.UTF8 vs en_US.UTF8)。在新服务器中将语言环境设置为 C.UTF8 后,它们现在的行为相同。
在Linux 环境中为单个应用程序设置语言环境很容易。您只需要在申请前添加 export LANG=C.UTF8;
即可。假设您以 python myprogram.py
的身份执行应用程序,然后键入:
export LANG=C.UTF8; python myprogram.py
我正在将 python 应用程序从语言环境 en_US.UTF-8 的 ubuntu 服务器迁移到已设置 C.UTF-8 的新 debian 服务器默认。我试图了解是否会有任何影响,但无法在互联网上找到好的资源来了解两者之间的区别。
可能会有一些影响,因为它们在排序顺序、大小写关系、归类顺序、千位分隔符、默认货币符号等方面有所不同。
C.utf8 = POSIX 符合标准的默认语言环境。只有严格的 ASCII 字符有效,扩展为允许基本使用 UTF-8
en_US.utf8 = 美国英语 UTF-8 语言环境。
虽然我不确定您可能遇到的具体效果,但我相信您可以根据需要在应用程序中设置语言环境和编码。
一般来说,C
用于计算机,en_US
用于美国讲英语的人(以及其他想要相同行为的人)。
for computer 意味着字符串有时更标准化(但仍然是英文),因此可以从另一个程序读取一个程序的输出。使用 en_US
,字符串可以改进,字母顺序可以改进(可能通过芝加哥风格规则的新规则等)。因此更加用户友好,但可能不太稳定。注意:语言环境不仅用于字符串的翻译,还用于整理(字母顺序、数字(例如千位分隔符)、货币(我认为预测 $ 和 2 个小数位将保留是安全的)、月份、星期几等
在您的情况下,它只是两个语言环境的 UTF-8 版本。
一般来说应该没有关系。我通常更喜欢 en_US.UTF-8,但通常这并不重要,在你的情况下(服务器应用程序),它应该只更改日志和错误消息(如果你使用 locale.setlocale()
。你应该处理客户端你的应用程序中的语言环境。从其他程序读取的程序应该在打开管道之前设置 C
,所以这应该无关紧要。
如您所见,这可能并不重要。您也可以使用 POSIX
区域设置,也在 Debian 中定义。您可以使用 locale -a
.
注意:微优化将规定 C
/C.UTF-8
语言环境:没有文件翻译 (gettext
),以及关于排序规则和数字格式的简单规则,但这应该是可见的仅在服务器端。
以下是我在 /etc/default/locale
中添加 LC_TIME=C.UTF-8
的一些原因,以防对某人有所帮助:
它在 Firefox 中为 HTML5 input type=time (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time) and uses a datepicker in the format DD/MM/YYYY instead of MM/DD/YYYY for HTML5 input type=date (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date) 提供了一个 24 小时制而不是 AM/PM。
它允许在回复 Thunberbird 中的电子邮件时使用 YYYY-MM-DD 国际日期格式 (ISO 8601) 和 24 小时制。
以前,可以使用 LC_TIME=en_DK.UTF-8
(http://kb.mozillazine.org/Date_display_format) but there is a bug currently and it stopped working (https://bugzilla.mozilla.org/show_bug.cgi?id=1426907#c155)。
编辑:现在即使 LC_TIME=C.UTF-8
解决方法也不适用于 Thunberbird:https://bugzilla.mozilla.org/show_bug.cgi?id=1426907#c197
我可以确认对不同的区域设置有影响(C.UTF8 vs en_US.UTF8)。我最近将一个 python 程序部署到一台新服务器中,它的表现有所不同。新旧服务器都是Ubuntu18台服务器,唯一的区别是语言环境(C.UTF8 vs en_US.UTF8)。在新服务器中将语言环境设置为 C.UTF8 后,它们现在的行为相同。
在Linux 环境中为单个应用程序设置语言环境很容易。您只需要在申请前添加 export LANG=C.UTF8;
即可。假设您以 python myprogram.py
的身份执行应用程序,然后键入:
export LANG=C.UTF8; python myprogram.py