我解决了这个问题,但我想了解原因
我在一台运行Python3.9.6的Windows10电脑上。我有一个简单的文本文件,其中只有一行,就是:
Fifty_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,文件正常打开和处理
所以我的问题是,既然我使用的是Python3.9,我是否必须始终指定utf-16?我试图打开的简单文件中没有特殊字符;所以我不明白为什么会有问题
如有任何见解,将不胜感激
谢谢--
艾尔
如名称中所示,
utf-16
中的每个字符长度为16位或2字节。试图将其作为utf-8
编码的文件打开将不起作用,因为这两种编码在基本级别上不兼容。我认为我使用的大多数文件都是utf-8
,但是很多Microsoft程序(如Powershell和Excel)默认情况下会在utf-16
中生成文本文档就“猜测”编码而言,there isn't really a "right" way to do it.在任何文件中都没有通用的字节序列来指定使用了什么编码,因为编码是相当任意的,可以随时设计新的编码
相关问题 更多 >
编程相关推荐