C3 83 C6 92 C3 82 C2 AA
C3 3F C2 AA
Đó là những gì bạn nhận được nếu coi chuỗi byte là UTF-8, sau đó mã hóa nó thành ISO-8859-1. 3F
là ?
, đã được đưa vào làm ký tự thay thế, vì UTF-8 C6 92
là U + 0192 ƒ
không tồn tại trong ISO-8859-1. Nhưng nó tồn tại trong trang mã Windows 1252 Tây Âu, một bảng mã rất giống với ISO-8859-1; ở đó, đó là byte 0x83.
C3 83 C2 AA
Đi qua một vòng khác của coi-như-UTF-8-byte-and-encode-to-cp1252 và bạn nhận được:
C3 AA
cuối cùng là UTF-8 cho ê
.
Lưu ý rằng ngay cả khi bạn phân phát trang HTML không phải XML một cách rõ ràng là ISO-8859-1, các trình duyệt sẽ thực sự sử dụng mã hóa cp1252, do những lý do xấu trong lịch sử.
Thật không may, MySQL không có mã hóa cp1252; latin1
là (chính xác) ISO-8859-1. Vì vậy, bạn sẽ không thể sửa dữ liệu bằng cách kết xuất dưới dạng latin1 sau đó tải lại dưới dạng utf8 (hai lần). Bạn phải xử lý tập lệnh bằng một trình soạn thảo văn bản có thể lưu dưới dạng một trong hai (hoặc ví dụ:trong tệp Python file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252')
).