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

Saving uploaded binary to local file

我正在尝试使用 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 格式,但是当我尝试在本地保存文件时,问题就开始了。比如说,我正在尝试 upload/save 一个 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 异常)

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

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