UTF-8 è (generalmente) una codifica "sicura" per qualsiasi set di caratteri nel mondo. (Non sempre il più efficiente, e ci sono alcune argomentazioni da sostenere che Unicode sottorappresenti gli script CJK con il suo modello "han unificato", ma andando avanti...)
Tuttavia, è probabile che i tuoi programmi di interfaccia non stiano traducendo correttamente in/da UTF-8. Ad esempio, ó => ó sembra che i dati UTF-8 (in cui un carattere può essere distribuito su un numero variabile di byte) ti vengano presentati utilizzando una codifica europea a byte singolo, come ISO-8859-15 o MS- CP-1451 o simile.
Sei probabilmente memorizzare i dati correttamente, ma caricare in modo errato. Se stai solo usando mysql
programma terminale o simile, assicurati che il tuo terminale sia impostato per utilizzare UTF-8 (su un sistema Unix/Linux, locale
probabilmente dovrebbe essere qualcosa che termina con .utf8
, per esempio. il mio ha LANG=en_US.utf8
)
Se stai estraendo dati utilizzando uno strumento GUI o simile, controlla il suo pannello Impostazioni/Preferenze per il set di caratteri.
Se stai recuperando i caratteri tradotti in modo errato in un'applicazione che hai scritto, guarda gli strumenti della tua lingua per impostare le impostazioni locali. (Forse, il INSERT
le routine hanno ragione, ma il SELECT
routine hai sbagliato?)
E, se questo viene inviato al Web, assicurati che i tuoi file (XML|HTML|XHTML) abbiano charset=utf8
dichiarato nel luogo o nei luoghi appropriati, o riconduci da UTF-8 al set di caratteri del tuo documento (se possibile) usando qualcosa come iconv
durante l'inserimento di testo dal database. (La maggior parte dei set di caratteri non Unicode può rappresentare solo un sottoinsieme di Unicode, ovviamente; ad esempio il set ISO-8859-15 fa un lavoro decente nel coprire le lingue europee, ma non supporta i sistemi di scrittura in cirillico, arabo o CJK, quindi è possibile non riuscire a tradurre un carattere.) In Perl, puoi usare gli argomenti pass per open
oppure usa binmode
per impostare un livello di traduzione del set di caratteri trasparente su un flusso "filehandle".