C3 83 C6 92 C3 82 C2 AA
C3 3F C2 AA
To właśnie otrzymasz, jeśli potraktujesz sekwencję bajtów jako UTF-8, a następnie zakodujesz ją jako ISO-8859-1. 3F
to jest ?
, który został dołączony jako znak zastępczy, ponieważ UTF-8 C6 92
to U+0192 ƒ
który nie istnieje w ISO-8859-1. Ale istnieje w stronie kodowej Windows 1252 Western European, kodowaniu bardzo podobnym do ISO-8859-1; tam jest to bajt 0x83.
C3 83 C2 AA
Przejdź przez kolejną rundę traktowania jako UTF-8-bajtów i kodowania-do-cp1252, a otrzymasz:
C3 AA
czyli wreszcie UTF-8 dla ê
.
Zwróć uwagę, że nawet jeśli podajesz stronę HTML inną niż XML wyraźnie jako ISO-8859-1, przeglądarki będą faktycznie używać kodowania cp1252 z powodu nieprzyjemnych przyczyn historycznych.
Niestety MySQL nie posiada kodowania cp1252; latin1
jest (poprawnie) ISO-8859-1. Więc nie będziesz w stanie naprawić danych przez zrzucenie jako latin1, a następnie ponowne załadowanie jako utf8 (dwa razy). Musiałbyś przetworzyć skrypt za pomocą edytora tekstu, który można zapisać jako albo (lub np. w Pythonie file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252')
).