UTF-8 er (generelt) en "sikker" kodning for ethvert tegnsæt i verden. (Ikke altid den mest effektive, og der er nogle argumenter, der skal fremføres for, at Unicode underrepræsenterer CJK-scripts med dens "unified han"-model, men fortsætter...)
Det er dog sandsynligt, at dine grænsefladeprogrammer ikke oversætter til/fra UTF-8 korrekt. For eksempel ser ó => ó ud som om UTF-8-data (hvor ét tegn kan spredes over et varierende antal bytes) bliver præsenteret for dig ved hjælp af en enkeltbyte europæisk kodning, som ISO-8859-15 eller MS- CP-1451 eller lignende.
Du er sandsynligvis gemmer dataene korrekt, men indlæser det forkert. Hvis du bare bruger mysql
terminalprogram eller lignende, sørg for at din terminal er indstillet til at bruge UTF-8 (på et Unix/Linux-system, locale
skal nok være noget, der ender på .utf8
, for eksempel. min har LANG=en_US.utf8
)
Hvis du trækker data ved hjælp af et GUI-værktøj eller lignende, skal du tjekke dets Indstillinger/Præferencer-panel for tegnsættet.
Hvis du får de forkert oversatte tegn tilbage til et program, du har skrevet, skal du se på dit sprogs værktøjer til indstilling af lokalitet. (Måske INSERT
rutiner har det rigtige, men SELECT
rutiner går det galt?)
Og hvis dette sendes til internettet, skal du sørge for, at dine (XML|HTML|XHTML) filer har charset=utf8
erklæret på det eller de relevante steder, eller oversæt tilbage fra UTF-8 til tegnsættet i dit dokument (hvis muligt) ved hjælp af noget som iconv
ved indsættelse af tekst fra databasen. (De fleste ikke-Unicode-tegnsæt kan kun repræsentere en delmængde af Unicode, selvfølgelig; ISO-8859-15-sættet gør f.eks. et anstændigt stykke arbejde med at dække europæiske sprog, men har ingen understøttelse af kyrilliske, arabiske eller CJK-skriftsystemer, så det er muligt at undlade at oversætte et tegn.) I Perl kan du bruge pass argumenter til at open
eller brug binmode
at opsætte et transparent tegnsæt-oversættelseslag på en "filehandle"-stream.