![](/img/trans.png)
[英]Why is my defaultencoding ‘utf-8’ with python 2.7.2?
[英]Why does python's open() function mangle my utf-8 files?
这是一个奇怪的问题,可能是由于 python 更新,因为它昨天运行良好,没有任何变化。 开始了:
我有一个程序可以打开 utf-8 文件(使用重音字符等,而不仅仅是 ansi 字符)。 当我使用open(file, encoding="utf-8-sig").read()
非ansi 字符会被破坏,如我的终端中所示:
但是,当我将编码设置为"ansi"
,字符完全正常!
这对我来说完全是个谜。 如前所述,昨天这工作正常。 我已经多次检查过这些文件确实是 utf-8。 不知道是open()函数的问题,还是显示字符时print()函数的问题。 无论如何,这很奇怪。 "ansi"
版本将是一个解决方案,但问题是它会导致Lark出现问题,它使用打开的文件的内容。
在我在这里给出的屏幕截图中,代码是基本的:
with open(str(GRAMMAR), "r", encoding="utf-8-sig") as grammar:
print(grammar.read())
什么可能这个问题所致?
我刚刚注意到一些事情: ansi
不是编码。 编码的正确名称是ascii
。 这意味着当我输入encoding="ansi"
,python 忽略了我要求它设置和读取文件作为其默认编码的编码,通常是 utf-8。 这并不能解释为什么它不适用于utf-8-sig
或为什么 Lark 对我尖叫,但这特定于我的情况。 因此,对于此问题的未来读者,请检查两件事:
ascii
,而不是ansi
。在 Windows 机器上,Python 将名称“ansi”识别为“mbcs”编解码器的别名,定义为
仅限 Windows:根据 ANSI 代码页 (CP_ACP) 对操作数进行编码。
所以 ansi 是一种有效的编码,但它与 ASCII 或 UTF-8 不同,因此存在明显的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.