gpt4 book ai didi

python - 为什么 LANG 会改变 str.encode() 的输出

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:28 25 4
gpt4 key购买 nike

此命令返回 b'?',正如预期的那样,因为“α”不在 ISO-8859-1 编码中。

LANG=en_US.UTF-8 python -c "print('α'.encode('ISO-8859-1', 'replace'))"

此命令返回b'\xce\xb1',我不明白。

LANG=en_US.ISO-8859-1 python -c "print('α'.encode('ISO-8859-1', 'replace'))"

这是什么原因造成的?我想做的是删除不在编码中的字符(这里是 ISO-8859-1),用 ? 替换它们,因为我认为这段代码应该这样做。

最佳答案

它不会改变 str.encode 的输出;它正在改变 sys.stdin 的编码。

$ LANG=en_US.UTF-8 python -c "print(__import__('sys').stdin.encoding)"
UTF-8
$ LANG=en_US.ISO-8859-1 python -c "print(__import__('sys').stdin.encoding)"
ISO-8859-1

因此,Python 将终端中的 UTF-8 b'\xce\xb1' 解释为文字字节:

$ LANG=en_US.ISO-8859-1 python3 -c "print(len('α'))"
2
$ LANG=en_US.UTF-8 python3 -c "print(len('α'))"
1

关于python - 为什么 LANG 会改变 str.encode() 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com