将上传的二进制文件保存到本地文件
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 以上的任何代码点。
我正在尝试使用 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 以上的任何代码点。