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

Posted

技术标签:

【中文标题】C.UTF-8 和 en_US.UTF-8 语言环境有啥区别?【英文标题】:What is the difference between C.UTF-8 and en_US.UTF-8 locales?C.UTF-8 和 en_US.UTF-8 语言环境有什么区别? 【发布时间】:2019-09-04 12:47:06 【问题描述】:

我正在将 python 应用程序从具有语言环境 en_US.UTF-8 的 ubuntu 服务器迁移到默认情况下已设置 C.UTF-8 的新 debian 服务器。我试图了解是否会有任何影响,但在互联网上找不到好的资源来了解两者之间的区别。

【问题讨论】:

【参考方案1】:

我可以确认对不同的语言环境有影响(C.UTF8 与 en_US.UTF8)。我最近将一个 python 程序部署到了一个新服务器中,它的执行方式有所不同。新旧服务器都是 Ubuntu 18 服务器,唯一的区别是语言环境(C.UTF8 与 en_US.UTF8)。将新服务器中的语言环境设置为 C.UTF8 后,它们现在的行为相同。

在 Linux 环境中为单个应用程序设置语言环境很容易。您只需在申请前添加export LANG=C.UTF8;。假设您以python myprogram.py 执行您的应用程序,然后您输入:

export LANG=C.UTF8; python myprogram.py

【讨论】:

谢谢 Ben Lin,您能否分享一下您注意到的不同之处? 嗨,Marcelo,抱歉,我无法指出差异,因为我的产品线太长了。它与 ocr/python/numpy/opencv 等有关。【参考方案2】:

以下是我在/etc/default/locale 中添加LC_TIME=C.UTF-8 的一些原因,以防它对某人有所帮助:

它在 Firefox 中为 html5 输入类型 = 时间 (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time) 提供 24 小时时钟而不是上午/下午,并使用 DD/MM/YYYY 格式的日期选择器而不是 MM/DD/YYYY 格式的 HTML5 输入类型=日期 (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date)。

在 Thunberbird 中回复电子邮件时,它允许使用 YYYY-MM-DD 国际日期格式 (ISO 8601) 和 24 小时制。

以前,LC_TIME=en_DK.UTF-8 (http://kb.mozillazine.org/Date_display_format) 可以,但目前有一个错误,它停止工作 (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

【讨论】:

【参考方案3】:

一般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),以及整理和数字格式的简单规则,但这应该只在服务器端可见。

【讨论】:

【参考方案4】:

可能会有一些影响,因为它们在排序顺序、大小写关系、整理顺序、千位分隔符、默认货币符号等方面有所不同。

C.utf8 = 符合 POSIX 标准的默认语言环境。只有严格的 ASCII 字符有效,扩展为允许基本使用 UTF-8

en_US.utf8 = 美式英语 UTF-8 语言环境。

虽然我不确定您可能会遇到的具体效果,但我相信您可以根据需要在应用程序中设置语言环境和编码。

【讨论】:

我想对此表示赞同,但我还没有仅仅因为我不知道它是否属实......但是,我会注意到它至少是有道理的。如果可以在此答案中包含参考,那就太好了。 什么是“UTF-8 的基本用法”?

以上是关于C.UTF-8 和 en_US.UTF-8 语言环境有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

修改Linux系统语言

en_US.UTF-8 语言环境的 Windows 等效项是啥?

linux修改默认语言

centos7如何修改系统默认语言

linux设置默认语言

Linux 基础命令