кодирование и декодирование строки байтов python

Я пытаюсь преобразовать входящую строку байтов, содержащую не-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.

Есть идеи?

РЕДАКТИРОВАТЬ: У меня есть кадры Ethernet, которые хранятся в таблице mysql в виде BLOB-объектов (пожалуйста, все, оставайтесь в теме и не обсуждайте, почему в таблице есть пакеты). Сопоставление таблиц - utf-8, а уровень db (sqlalchemy, non-orm) захватывает данные и создает структуры (буферы протокола Google), которые хранят большой двоичный объект как python 'str'. В некоторых случаях я использую буферы протокола напрямую без каких-либо проблем. В других случаях мне нужно предоставить те же данные через json. Я заметил, что когда json.dumps() делает свое дело, '\x80' может быть заменен недопустимым юникодным символом (\ufffd iirc)

10
задан Marcin 10 March 2012 в 11:03
поделиться