1

这是一个奇怪的问题,可能是由于 python 更新,因为它昨天运行良好,没有任何变化。开始了:

我有一个程序可以打开 utf-8 文件(使用重音字符等,而不仅仅是 ansi 字符)。当我用 . 打开文件时open(file, encoding="utf-8-sig").read(),非 ansi 字符会被破坏,如下所示在我的终端中:

当编码open()设置为"utf-8-sig"

但是,当我将编码设置为 时"ansi",字符完全正常!

普通字符encoding="ansi"

这对我来说完全是个谜。如前所述,昨天工作正常。我已经多次检查文件确实是 utf-8。我不知道问题出在 open() 函数,还是显示字符时的 print() 函数。无论如何,这很奇怪。该"ansi"版本将是一个解决方案,但问题是它会导致Lark出现问题,它使用打开文件的内容。

在我在这里给出的截图中,代码是基本的:

with open(str(GRAMMAR), "r", encoding="utf-8-sig") as grammar:
    print(grammar.read())

这个问题可能是由什么引起的?

4

2 回答 2

0

在 Windows 机器上,Python 将名称“ansi”识别为“mbcs”编解码器的别名,定义为

仅限 Windows:根据 ANSI 代码页 (CP_ACP) 对操作数进行编码。

所以 ansi 是一种有效的编码,但它与 ASCII 或 UTF-8 不同,因此有明显的变形。

于 2021-10-20T15:31:54.313 回答
-1

我刚刚注意到一些事情:ansi不是编码。编码的正确名称是ascii. 这意味着当我输入 时encoding="ansi",python 忽略了我要求它设置和读取文件的默认编码,通常是 utf-8。这并不能解释为什么它不起作用utf-8-sig或为什么 Lark 对我大喊大叫,但这是针对我的情况的。因此,对于这个问题的未来读者,请检查两件事:

  1. 如果要使用 ascii,请键入ascii,而不是ansi
  2. 坚持使用默认值。
于 2021-10-20T12:29:59.803 回答