我正在尝试将包含非ascii字符的传入字节字符串转换为有效的utf-8字符串,以便可以将is转储为json。
b = '\x80'
u8 = b.encode('utf-8')
j = json.dumps(u8)
我希望j是'\xc2\x80',但是我得到了:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)
在我的情况下,“b”来自mysql,通过google协议缓冲区,并由一些blob数据填充。
有什么想法吗?
编辑: 我有以太网帧作为blob存储在一个mysql表中(请大家注意,不要讨论表中为什么有数据包)。表排序规则是utf-8,db层(sqlalchemy,non-orm)正在获取数据并创建结构(google protocol buffers),将blob存储为python“str”。在某些情况下,我直接使用协议缓冲区而没有任何问题。在其他情况下,我需要通过json公开相同的数据。我注意到,当json.dumps()执行其操作时,'\x80'可以替换为无效的unicode字符(\ufffd iirc)
我想你要做的是解码一些编码的字符串对象。你知道那个编码是什么吗?以获取unicode对象。
然后使用utf_8编码将unicode对象重新编码回string对象。
使用unicode对象作为转换程序,不知道字符串的原始编码是什么,我无法确定,但有可能转换不会如预期的那样进行。unicode对象不用于将一种编码的字符串转换为另一种编码。我将使用unicode对象,假设您知道编码是什么,如果您不知道编码是什么,那么真的没有办法不经尝试和错误地找出答案,然后在您想要返回字符串对象时转换回编码的字符串。
使用
b.decode('name of source encoding')
获取unicode版本。当我学会这一点时,我感到很惊讶。例如:相关问题 更多 >
编程相关推荐