二进制数据转换为Unicode
在这里列出的所有编码方式中,http://docs.python.org/library/codecs.html,我应该用哪一种来把二进制数据解码成unicode,这样在我把它重新编码成字符串的时候就不会出现损坏呢?
我试过使用raw_unicode_data,但效果不好。
举个例子:我在POST请求中上传了一张图片(但不是作为文件附件)。Django会把POST数据转换成unicode,使用的是utf-8编码。然而,当我再把unicode转换回字符串(同样使用utf-8)时,数据就出现了损坏。我用raw_unicode_data也是这样(不过这次只损坏了几个字节)。我应该使用哪种编码,才能确保解码和编码的过程不会损坏数据呢?
3 个回答
1
正如其他人所说,你的问题不太清楚。如果你想通过文本通道(比如POST请求)传输二进制数据,那么使用base64
格式是合适的。这个过程大致是这样的:先把二进制数据转换成base64文本,然后通过文本通道发送,接收后再把base64文本转换回二进制数据。
另外,如果你想处理一些编码不正确的文本(比如Python 3在处理某些接口时,比如文件路径和环境变量,尝试做到的),那么从Python 3.1开始,有一个叫surrogatescape
的错误处理器,它可以把无效的值转换成一种不太可读的格式,但在重新编码成字节时,可以忠实地还原原来的二进制数据。
7
如果你想发送二进制数据,可以使用base64编码。
3
“二进制数据”不是文本,所以把它转换成unicode
是没有意义的。如果二进制数据里面有文本,首先要把这些文本提取出来,然后再用数据格式说明中给出的编码方式进行解码。