设置 `LC_ALL=C.UTF-8` 和 `LANG=C.UTF-8` 的后果

ana*_*nik 7 environment utf-8

为了通过快速打包 Python 应用程序来修复该错误,我准备添加以下代码:

# I don't know what I am doing
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
Run Code Online (Sandbox Code Playgroud)

有很多文本似乎解释了 a 的LC_ALL=C作用(但不是LC_ALL=C.UTF-8or LANG=C.UTF-8),还有一大段文本解释了 bug 和 Python 行为。但都不适合我的小脑袋。通常我喜欢把头埋在血淋淋的技术细节上,但最近时间的压力让我变得相当无知

我只是想知道这句话的含义是什么This system supports the C.UTF-8 locale,如果我设置这些变量来切换到它会发生什么?(我猜是通过设置这些环境变量来实现的)

plu*_*ash 3

“C”语言环境关闭所有国际化,状态/错误消息为英语,字符和字节之间没有区别,按原始字节值排序。未定义 ASCII 范围之外的字节的含义。

对于完全使用字节的程序来说,这基本上没问题,它可以读取这些字节,处理它们并再次输出它们,而不关心 0x80-0xFF 范围内的字节值到底意味着什么。

然而,它给 python3 的“将所有内容转换为 unicode”方法带来了大问题。如果您不知道 0x80-0xFF 范围内的字节值的含义,则无法将它们正确转换为 Unicode。Python3 决定在这种情况下引发错误,而不是做出可能不正确的假设。

然而,在广泛分布的脚本中使用语言区域设置也存在问题。第一个问题是您无法确定任何特定语言的区域设置将出现在运行脚本的每个系统上。其次,特定于语言的区域设置可能具有脚本编写者认为不需要的其他设置。

C.UTF-8 保留了 C 语言环境的大部分特征,但指定了 UTF-8 编码。