Я пытаюсь преобразовать входящую строку байта, которая содержит символы не-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.
Любые идеи?
EDIT: У меня есть кадры ethernet, которые хранятся в таблице mysql как blob (пожалуйста, все, оставайтесь на теме и не обсудите, почему в таблице есть пакеты). Сопоставление таблицы - utf-8, а слой db (sqlalchemy, non-orm) захватывает данные и создает структуры (буферы протокола google), которые хранят blob как python 'str'. В некоторых случаях я использую протокольные буферы напрямую без каких-либо проблем. В других случаях мне нужно выставить одни и те же данные через json. Я заметил, что когда json.dumps() делает свою вещь, "\ x80" можно заменить недействительным юникодом char (\ ufffd iirc)