我正在使用python来读取带有以下段
的文本文件(因为我是菜鸟,所以不能发布截图)但这就是记事本++中的样子:
NULSOHSOHNULNULNULSUBMesssage-ID:
错误:
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
print(f.readline())
File "C:\Python32\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 7673: character maps to <undefined>
以二进制文件打开文件:
f = open('file.txt','rb')
f.readline()
给我的文字为二进制
B'\ X00 \ X01 \ X01 \ X00 \ X00 \ X00 \ X1A \ xb7Message-ID:
但如何将文本作为ascii?最简单/ pythonic处理这个的方法是什么?
答案 0 :(得分:2)
在文本模式下打开文件时,您可以具体说明要使用的编码:
f = open('file.txt','r',encoding='ascii')
但是你真正的问题是不同的:你引用的二进制文件不能读为ASCII,因为字节\xb7
超出了ASCII范围(0-127)。异常回溯告诉Python默认使用cp1252编解码器,它也无法解码您的文件。
您需要确定文件的编码方式,或者始终将其作为二进制文件处理。
答案 1 :(得分:2)
问题在于“位置7673中的字节0x8f”,而不是“位置1中的字节0x00”。即,你的NUL不是问题。如果查看cp-1252 codepage on wikipedia,可以看到0x8f没有相应的字符。
更大的问题是您的文件不是单一编码:它似乎是文本段的二进制框架的混合。你真正需要做的是弄清楚这个文件的格式并将其解析为二进制文件(或者可能是一些更丰富的数据结构,如元组,列表,字典,对象等),然后将文本块解码为unicode需要进一步处理。
答案 2 :(得分:0)
也许在阅读正确的阅读模式时打开它?
f = open('file.txt','r')
f.readline()