C3 83 C6 92 C3 82 C2 AA
C3 3F C2 AA
Det är vad du får om du behandlar sekvensen av bytes som UTF-8 och sedan kodar den som ISO-8859-1. 3F
är ?
, som har inkluderats som ett ersättningstecken, eftersom UTF-8 C6 92
är U+0192 ƒ
som inte finns i ISO-8859-1. Men det finns i Windows kodtabell 1252 västeuropeisk, en kodning mycket lik ISO-8859-1; där är det byte 0x83.
C3 83 C2 AA
Gå igenom ytterligare en omgång av behandla-som-UTF-8-bytes-and-encode-to-cp1252 och du får:
C3 AA
vilket slutligen är UTF-8 för ê
.
Observera att även om du visar en HTML-sida som inte är XML uttryckligen som ISO-8859-1, kommer webbläsare faktiskt att använda cp1252-kodningen, på grund av otäcka historiska skäl.
Tyvärr har MySQL ingen cp1252-kodning; latin1
är (korrekt) ISO-8859-1. Så du kommer inte att kunna fixa data genom att dumpa som latin1 och sedan ladda om som utf8 (två gånger). Du måste bearbeta skriptet med en textredigerare som kan spara som antingen (eller t.ex. i Python file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252')
).