字节前置的字节

时间:2018-03-21 18:14:11

标签: python windows python-3.x encoding

我正在阅读Python中的一些CSV文件。该文件已从Windows上载到AWS S3,然后使用urllib.request下载。该文件应以

开头
some text

但是它以

开头
b'u\xabZj\x9ae\x89\xc6\xad\x8a\x89\xff\xbewf\xb1\xec\\zV\xda\xb1\xee\xb8\xef\xbb\xbfsome text

所以,当这段代码被执行时:

filetemp = urllib.request.urlopen(file_url)
    content = filetemp.read(1024)

content变量以

开头
b'u\xabZj\x9ae\x89\xc6\xad\x8a\x89\xff\xbewf\xb1\xec\\zV\xda\xb1\xee\xb8\xef\xbb\xbf**some text

它可以是某种BOM吗?它看起来不像我熟悉的任何BOM。我使用chardet找出文件是使用Windows-1252编码编码的,当我使用该编码对其进行解码时,我得到了

u«Zjše‰Æ­Š‰ÿ¾wf±ì\\zVÚ±î¸ï»¿some text

当我在Excel或记事本中打开文件时,它看起来很好,它以some text开头。所以,显然他们知道如何处理它,但我不知道。我错过了什么?

更新:当我在Mac上下载此文件并以相同的方式阅读(使用相同的代码)时,它仅以\xef\xbb\xbf为前缀,即UTF-8 BOM。所以Windows正在添加其他字节。

更新2 :好的,它必须是urllib.request的东西,因为当我从AWS S3手动下载该文件并执行以下Python脚本时:

file = open('myfile.csv', 'r')
filecontent = file.read()
file.close()

filecontent变量不包含那些奇怪的字节,只包含BOM。这可能与他的评论中链接的usr2564301类似。

1 个答案:

答案 0 :(得分:1)

我在usr2564301's评论的帮助下找到了解决方案。上传文件时,字符串data:application/vnd.ms-excel;base64,被添加到HTTP请求有效负载之前。 This answer can可以应用于我的问题。