繁体   English   中英

Python读取非ascii文本文件

[英]Python read non-ascii text file

我正在尝试加载一个文本文件,其中包含一些德语字母

content=open("file.txt","r").read() 

这会导致此错误消息

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 26: ordinal not in range(128)

如果我修改文件只包含ASCII字符,一切都按预期工作。

好好用

content=open("file.txt","rb").read() 

要么

content=open("file.txt","r",encoding="utf-8").read()

都做好了。

为什么可以用“二进制”模式读取并获得与utf-8编码相同的结果?

在Python 3中,使用'r'模式而不指定编码只使用默认编码,在本例中为ASCII。 使用'rb'模式将文件作为字节读取,并且不会尝试将其解释为字符串。

ASCII仅限于[0,128]范围内的字符。 如果您尝试解码超出该范围的字节,则会收到该错误。

当您以字节为单位读取字符串时,您将“可接受的字符范围”“扩展”为[0,256]。 所以你的\\ 0xc3字符Ã现在被读入而没有错误。 但尽管它似乎有效,但它仍然不是“正确的”。

如果您的字符串确实是unicode编码的,则存在一种可能包含多字节字符的可能性,即字节表示实际跨越多个字节的字符。

在这种情况下,将文件作为字节串读取并正确解码它之间的区别将非常明显。

像这样的人物:č

将作为两个字节读入,但正确解码,将是一个字符:

bytes = bytes('č', encoding='utf-8')

print(len(bytes))                   # 2
print(len(bytes.decode('utf-8')))   # 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM