二进制数据转换为Unicode

1 投票
3 回答
4657 浏览
提问于 2025-04-16 12:24

在这里列出的所有编码方式中,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编码。

http://docs.python.org/library/base64.html

3

“二进制数据”不是文本,所以把它转换成unicode是没有意义的。如果二进制数据里面有文本,首先要把这些文本提取出来,然后再用数据格式说明中给出的编码方式进行解码。

撰写回答