我正在尝试将包含非 ascii 字符的传入字节字符串转换为有效的 utf-8 字符串,以便我可以将其转储为 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,非 orm)正在抓取数据并创建将 blob 存储为 python 'str' 的结构(google 协议缓冲区)。在某些情况下,我直接使用协议缓冲区没有任何问题。在其他情况下,我需要通过 json 公开相同的数据。我注意到的是,当 json.dumps() 做它的事情时,'\x80' 可以替换为无效的 unicode char (\ufffd iirc)