UTF-8 is (over het algemeen) een "veilige" codering voor elke tekenset ter wereld. (Niet altijd de meest efficiënte, en er zijn enkele argumenten te bedenken dat Unicode de CJK-scripts ondervertegenwoordigt met zijn "unified han" -model, maar verder ...)
Het is echter waarschijnlijk dat uw interfaceprogramma('s) niet correct naar/van UTF-8 vertalen. Bijvoorbeeld, ó => ó lijkt erop dat de UTF-8-gegevens (waarbij één teken kan worden verspreid over een variërend aantal bytes) aan u worden gepresenteerd met behulp van een Europese codering van één byte, zoals ISO-8859-15 of MS- CP-1451 of vergelijkbaar.
U bent waarschijnlijk de gegevens correct opslaan, maar laden het verkeerd. Als u alleen de mysql
. gebruikt terminalprogramma of iets dergelijks, zorg ervoor dat uw terminal is ingesteld om UTF-8 te gebruiken (op een Unix/Linux-systeem, locale
zou waarschijnlijk iets moeten zijn dat eindigt op .utf8
, bijv. de mijne heeft LANG=en_US.utf8
)
Als u gegevens ophaalt met een GUI-tool of iets dergelijks, controleer dan het instellingen-/voorkeurenpaneel voor de tekenset.
Als je de verkeerd vertaalde tekens terugkrijgt in een toepassing die je hebt geschreven, kijk dan naar de hulpmiddelen van je taal om de landinstelling in te stellen. (Misschien de INSERT
routines hebben het goed, maar de SELECT
routines hebben het verkeerd?)
En als dit naar het web wordt gestuurd, zorg er dan voor dat uw (XML|HTML|XHTML) bestanden charset=utf8
hebben gedeclareerd op de juiste plaats(en), of vertaal terug van UTF-8 naar de tekenset van uw document (indien mogelijk) met iets als iconv
bij het invoegen van tekst uit de database. (De meeste niet-Unicode-tekensets kunnen natuurlijk alleen een subset van Unicode vertegenwoordigen; bijv. de ISO-8859-15-set doet behoorlijk zijn best om Europese talen te dekken, maar heeft geen ondersteuning voor Cyrillische, Arabische of CJK-schrijfsystemen, dus het is mogelijk om een teken niet te vertalen.) In Perl kunt u pass-argumenten gebruiken om open
of gebruik binmode
om een transparante tekenset-vertaallaag op een "filehandle"-stroom in te stellen.