【发布时间】:2021-11-06 08:20:53
【问题描述】:
我解决了这个问题,但我想了解原因。
我在运行 Python 3.9.6 的 Windows 10 电脑上。我有一个简单的文本文件,里面只有一行,就是:
50_50
一段时间以来,我一直在运行一个小的 python 实用程序文件,打开这样的文件并解析内容没有任何问题,但我一直在使用 Python 3.7。我的代码很简单:
with open(companyfile) as companies:
for company in companies:
...
当我昨天运行这个时,我开始从这个简单的单行文件中得到垃圾而不是文本。我认为这很可能是因为我没有提供编码并将代码更改为:
with open(companyfile, 'r', encoding='utf-8') as companies:
这给了我这个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
最后试了utf-16,文件打开处理正常。
所以我的问题是,既然我使用的是 Python 3.9,我是否必须始终指定 utf-16?我试图打开的简单文件中没有特殊字符;所以我不明白为什么它有问题。
任何见解都将不胜感激。
谢谢--
阿尔
【问题讨论】:
-
尝试使用 open(companyfile, 'rb') 打开文件并查看文件内容。这将阻止字节解码,因此您可以查看文件的内容并检查无关字符。
-
我确实试过了,虽然 vim 在文件中没有看到任何奇怪的东西,但用 'rb' 打开它确实发现了无关字符。由于我自己用 vim 手动创建了文件,我不确定这些无关字符是从哪里来的……不过这是我的第一个线索。
-
您是否能够使用新文件重新创建此问题?
-
您必须以保存它的编码打开文件。无论出于何种原因,该文件都以 UTF-16 编码保存。
open()的默认值是locale.getpreferredencoding(False),对于美国 Windows 通常是cp1252。
标签: python python-3.x utf