将上传的二进制文件保存到本地

时间:2015-11-19 03:00:06

标签: python json unicode ascii python-unicode

我正在尝试使用websockets将文件从javascript网页上传到基于python的服务器。

在JS中,这就是我通过websocket传输数据包的方式:

var json = JSON.stringify({
    'name': name,
    'iData': image
});
在python中,我正在解码它:

noJson = json.loads(message)
fName = noJson["name"]
fData = noJson["iData"]

我知道fData是unicode格式,但是当我尝试在本地保存文件时,就会出现问题。说,我正在尝试上传/保存JPG文件。上传后查看该文件我在开头看到:

ÿØÿà^@^PJFIF

原始代码应为:

<FF><D8><FF><E0>^@^PJFIF

那么如何使用代码保存它而不是解释的unicode字符?

fd = codecs.open( fName, encoding='utf-8', mode='wb' ) ## On Unix, so the 'b' might be ignored
fd.write( fData)
fd.close()

(如果我不使用“encoding =”位,则抛出UnicodeDecodeError异常)

1 个答案:

答案 0 :(得分:0)

使用'latin-1'编码保存文件。

您获得的fData已经编码了字符,即您获得字符串u'\xff\xd8\xff\xe0^@^PJFIF'latin-1编码将字面上将U + 00和U + FF之间的所有代码点转换为单个字符,并且无法转换U + FF之上的任何代码点。