非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」は Google プロトコル バッファ経由で mysql から送信され、いくつかの blob データが入力されています。
何か案は?
編集: mysql テーブルに blob として格納されているイーサネット フレームがあります (皆さん、話題にとどまり、テーブルにパケットがある理由について議論しないでください)。テーブル照合は utf-8 であり、db レイヤー (sqlalchemy、非 orm) はデータを取得し、ブロブを Python 'str' として格納する構造体 (Google プロトコル バッファー) を作成します。場合によっては、問題なくプロトコル バッファを直接使用します。それ以外の場合は、json を介して同じデータを公開する必要があります。私が気付いたのは、json.dumps() が機能するときに、「\x80」を無効な Unicode 文字 (\ufffd iirc) に置き換えることができることです。