二进制数据到Unicode

时间:2011-02-23 17:59:49

标签: python unicode encoding character-encoding binary

此处提供的所有编码http://docs.python.org/library/codecs.html 我应该使用哪一个将二进制数据解码为unicode,而不会在我将其编码回字符串时被破坏?

我使用了raw_unicode_data但它不起作用。

示例:我在POST中上传图片(但不是文件附件)。 Django使用utf-8将POST数据转换为unicode。但是,当从unicode转换回字符串(再次使用utf-8)时,数据会被破坏。我使用了raw_unicode_data并且发生了同样的事情(虽然这次只有几个字节)。我应该使用哪种编码,以便解码和编码步骤不会破坏数据。

3 个答案:

答案 0 :(得分:7)

如果要发布二进制数据,请使用base64编码。

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

答案 1 :(得分:3)

“二进制数据”不是文本,因此将其转换为unicode毫无意义。如果二进制数据中嵌入了文本,则先将其解压缩,然后使用数据格式规范中给出的编码进行解码。

答案 2 :(得分:1)

正如其他人已经说过的那样,你的问题并不是特别清楚。如果您想通过文本通道(例如POST)汇集二进制数据,那么base64是在客户端和服务器中使用适当的数据转换操作的正确格式(二进制数据 - > base64文本 - >传递文本频道 - > base64文字 - >二进制数据。)

或者,如果您想要容忍不正确编码的文本(例如,当Python 3尝试为某些接口(如文件路径和环境变量)执行时),则Python 3.1及更高版本会提供surrogatescape错误处理程序,将无效值转换为无效的可读文本格式,但允许在编码回字节时忠实地重新创建原始二进制数据。