使用 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
函数时,不会发生这种情况。
我的问题:
- 为什么只有在指定
encoding
时才会出现此错误?我认为,在其他情况下我们也应该得到相同的错误,因为默认编码也是“UTF-8”。 (如有错误请指正) - 是否可以在不改变读取文本文件的方式的情况下解决此问题? (即,我可以对从 API 数据创建此文本文件的阶段进行任何更改吗?)
非常感谢您的调查。谢谢!
最佳答案
在 open()
中,默认编码与平台相关,您可以通过检查 locale.getpreferredencoding()
返回的内容来了解系统的默认编码。这是来自documentation
对于问题的第二部分,由于当您未指定 utf-8
作为编码时,您不会收到错误,因此您可以仅使用 locale.getpreferredencoding( 的输出) )
作为编码方法。
关于Python 无法从文本文件中读取 "–"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69647405/