Python 无法从文本文件中读取“–”字符

Python not able to read "–" character from text file

使用 Python,我从 API 中获取一些文本数据并在一些转换后将其存储在文本文件中,然后从不同的进程读取该文本文件。

从 API 读取数据时没有问题,但在读取文本文件时出现此错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 907: invalid start byte

被读取为“0x96”的字节实际上是 API 数据中的“–”字符,并且仅当 encoding 参数明确指定为 'utf-8' 时才会出现此错误。当 encoding 在打开文本文件时未显式传递给 open 函数时不会发生。

我的问题:

  1. 为什么只有在指定了encoding时才会出现这个错误?我认为,在其他情况下我们也应该得到同样的错误,因为默认编码也是 'UTF-8'。 (如有错误请指正)
  2. 是否可以在不改变我阅读文本文件的方式的情况下解决这个问题? (即我可以对从 API 数据创建此文本文件的阶段进行任何更改吗?)

非常感谢您的关注。谢谢!

open() 中,默认编码取决于平台,您可以通过检查 locale.getpreferredencoding() returns 来找出系统的默认编码。这是来自 documentation

对于问题的第二部分,由于在未指定 utf-8 作为编码时不会出现错误,因此您可以只使用 locale.getpreferredencoding() 的输出作为编码方法。

如果你这样做的话,你可以对文本的每一行都这样做。由于 0x96 被认为是“不可打印的”。

import re
...
line = re.sub(r'\x96',r'\x2D', line)