Mysql
 sql >> Database >  >> RDS >> Mysql

Le stringhe UTF-8 in un database MySQL sono state incasinate dopo la modifica della configurazione

C3 83 C6 92 C3 82 C2 AA
C3 3F C2 AA

Questo è ciò che ottieni se tratti la sequenza di byte come UTF-8, quindi la codifichi come ISO-8859-1. 3F è ? , che è stato incluso come carattere sostitutivo, perché UTF-8 C6 92 è U+0192 ƒ che non esiste nella ISO-8859-1. Ma esiste nella tabella codici di Windows 1252 dell'Europa occidentale, una codifica molto simile a ISO-8859-1; lì, è il byte 0x83.

C3 83 C2 AA

Esegui un altro ciclo di tratta-come-UTF-8-byte-e-codifica-in-cp1252 e ottieni:

C3 AA

che è, infine, UTF-8 per ê .

Tieni presente che anche se pubblichi una pagina HTML non XML esplicitamente come ISO-8859-1, i browser utilizzeranno effettivamente la codifica cp1252, a causa di cattivi motivi storici.

Sfortunatamente MySQL non ha una codifica cp1252; latin1 è (correttamente) ISO-8859-1. Quindi non sarai in grado di correggere i dati scaricando come latin1 e quindi ricaricando come utf8 (due volte). Dovresti elaborare lo script con un editor di testo che può salvare come (o ad esempio in Python file(path, 'rb').read().decode('utf-8').encode('cp1252').decode('utf-8').encode('cp1252') ).