Tôi đang cố gắng chuyển đổi chuỗi byte đến chứa các ký tự không phải ascii thành chuỗi utf-8 hợp lệ sao cho tôi có thể đổ là json.mã hóa và giải mã chuỗi byte python
b = '\x80'
u8 = b.encode('utf-8')
j = json.dumps(u8)
tôi mong đợi j là '\ xC2 \ x80' nhưng thay vào đó tôi nhận được:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)
Trong trường hợp của tôi, 'b' đến từ mysql thông qua bộ đệm giao thức google và được làm đầy với một số dữ liệu blob.
Bất kỳ ý tưởng nào?
EDIT: Tôi có khung ethernet được lưu trữ trong bảng mysql dưới dạng blob (vui lòng, mọi người, ở lại chủ đề và tiếp tục thảo luận tại sao có gói trong bảng). Bảng collation là utf-8 và lớp db (sqlalchemy, non-orm) là lấy dữ liệu và tạo các cấu trúc (bộ đệm giao thức google) lưu trữ các đốm màu như một con trăn 'str'. Trong một số trường hợp, tôi sử dụng bộ đệm giao thức trực tiếp với bất kỳ vấn đề nào. Trong các trường hợp khác, tôi cần phơi bày cùng một dữ liệu qua json. Những gì tôi nhận thấy là khi json.dumps() thực hiện điều đó, '\ x80' có thể được thay thế bằng char unicode không hợp lệ (\ ufffd iirc)
Bạn cần cung cấp đoạn mã cho biết "sử dụng bộ đệm giao thức trực tiếp mà không có bất kỳ vấn đề nào" có nghĩa là. Bạn cần hiển thị đoạn mã bạn làm gì với bộ đệm giao thức để tạo ra 'json.dumps' tạo \ ufffd. Bạn cần phải nói chính xác những gì người tiêu dùng của gói JSONised này dự kiến sẽ làm gì để khôi phục gói tin ban đầu. –