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

标签 python python-3.x python-3.8

使用 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() 返回的内容来了解​​系统的默认编码。这是来自documentation

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

关于Python 无法从文本文件中读取 "–"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69647405/

相关文章:

python - 无法解析功能 : goog:chromeOptions from invalid argument: unrecognized chrome option: prefs

使用nohup时python脚本无法工作

python - 陈旧;元素不再附加到 DOM,不在当前框架上下文中,或者文档已刷新

python - 在 Python 中使用槽和 "constants"

python-3.x - 当特定列值连续一定数量的行时如何获取行

python - 解压缩和 * 运算符

Python3 Antlr4属性错误: 'CommonToken' object has no attribute 'getLine'

python - 如何在pygame中显示由点组成的圆圈?

python - 无效参数错误 : cannot compute MatMul as input #0(zero-based) was expected to be a float tensor but is a double tensor [Op:MatMul]

python - 索引以更快地搜索文件中的列表?