【发布时间】:2021-10-20 11:32:46
【问题描述】:
这是一个奇怪的问题,可能是由于 python 更新,因为它昨天运行良好,没有任何变化。我们开始:
我有一个程序可以打开 utf-8 文件(使用重音字符等,而不仅仅是 ansi 字符)。当我使用 open(file, encoding="utf-8-sig").read() 打开文件时,非 ansi 字符会被破坏,如下所示在我的终端中:
mangled characters when encoding of open() is set to "utf-8-sig"
但是,当我将编码设置为"ansi" 时,字符完全正常!
normal characters with encoding="ansi"
这对我来说完全是个谜。如前所述,昨天工作正常。我已经多次检查文件确实是 utf-8。我不知道问题出在 open() 函数,还是显示字符时的 print() 函数。无论如何,这很奇怪。 "ansi" 版本是一个解决方案,但问题是它会导致 Lark 出现问题,它使用打开的文件的内容。
在我这里给出的截图中,代码是基本的:
with open(str(GRAMMAR), "r", encoding="utf-8-sig") as grammar:
print(grammar.read())
可能这个问题是由什么引起的?
【问题讨论】:
-
屏幕截图中的输出是否来自您的终端?这可能完全是打印问题,而不是实际字符串的问题,尤其是在 Windows 上。你有其他方法检查吗?
-
您可以尝试将
sys.stdout.reconfigure(encoding='utf-8')放在脚本的前面,看看是否有帮助。 -
您能否将文件缩减为失败的单行,用二进制读取文件,打印结果:
print(open(file,'rb').read()),然后编辑您的问题以包含它?这将消除文件内容和编码的歧义。ansi和utf-8是完全不同的编码,如果utf-8有效,则文件以 UTF-8 编码。如果读取为 UTF-8,带有这些字符的“ANSI”编码文件会引发异常。
标签: python utf-8 character-encoding lark-parser