2017-05-30 40 views
0

请我需要这方面的帮助:的UnicodeDecodeError:“字符映射”编解码器不能在1010494位置解码字节0x9d:字符映射为<undefined>

url ='https://www.sec.gov/Archives/edgar/data/1437750/0001477932-13-004416.txt' 
with open('file', 'wb') as f: 
    f.write(requests.get('%s' % url).content) 
with open('file', 'r') as t: 
      words= t.read() 

上面给了我以下错误:

return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1010494: character maps to < undefined> 

谢谢!

回答

-1

为什么你将你的文件写成二进制文件,然后将它作为unicode字符串读取? Python不知道如何解码原始流中的一些字节,直到告诉它使用哪个编解码器。既然你在你的第一个命令已经流文件不是UTF-8编码,尝试阅读时,你的文件进行解码,以latin-1

with open('file', 'r', encoding='latin-1') as t: 
    words = t.read() 
+0

合作。非常感谢。 – user5282933

+0

什么样的ASCII字符集是0x9d有意义?这不是有效的Windows-1252。 Python“latin-1”编解码器将其转换为Unicode 0x9D,即“操作系统命令”。[1]这没什么意义。使用“latin-1”编解码器转换此类文本不会使Python程序崩溃,但您在Unicode中得到的是带有[009d]的框。转换为“拉丁-1”只是关于这个问题的文件。 它似乎是某种引用标记,当它出现在英文文本中时。但它不是Windows-1252的特殊引号之一。 [1] http://www.fileformat.info/info/unicode/char/009d/index.htm –

+1

它不仅* UTF-8编码,似乎嵌入在页面中的二进制数据。你不应该试图以文本的形式读取二进制数据!使用'latin-1'编码是一种应该避免的黑客,除非你专门用它来清理别人的混乱,而且你真的知道自己在做什么。 –

相关问题