此处提供的所有编码http://docs.python.org/library/codecs.html 我应该使用哪一个将二进制数据解码为unicode,而不会在我将其编码回字符串时被破坏?
我使用了raw_unicode_data但它不起作用。
示例:我在POST中上传图片(但不是文件附件)。 Django使用utf-8将POST数据转换为unicode。但是,当从unicode转换回字符串(再次使用utf-8)时,数据会被破坏。我使用了raw_unicode_data并且发生了同样的事情(虽然这次只有几个字节)。我应该使用哪种编码,以便解码和编码步骤不会破坏数据。
答案 0 :(得分:7)
如果要发布二进制数据,请使用base64编码。
答案 1 :(得分:3)
“二进制数据”不是文本,因此将其转换为unicode
毫无意义。如果二进制数据中嵌入了文本,则先将其解压缩,然后使用数据格式规范中给出的编码进行解码。
答案 2 :(得分:1)
正如其他人已经说过的那样,你的问题并不是特别清楚。如果您想通过文本通道(例如POST)汇集二进制数据,那么base64
是在客户端和服务器中使用适当的数据转换操作的正确格式(二进制数据 - > base64文本 - >传递文本频道 - > base64文字 - >二进制数据。)
或者,如果您想要容忍不正确编码的文本(例如,当Python 3尝试为某些接口(如文件路径和环境变量)执行时),则Python 3.1及更高版本会提供surrogatescape
错误处理程序,将无效值转换为无效的可读文本格式,但允许在编码回字节时忠实地重新创建原始二进制数据。