UTF-8 je (obecně) „bezpečné“ kódování pro jakoukoli znakovou sadu na světě. (Ne vždy to je nejúčinnější a je třeba uvést několik argumentů, že Unicode nedostatečně zastupuje skripty CJK se svým modelem „unified han“, ale pokračujeme…)
Je však pravděpodobné, že váš program(y) rozhraní nepřekládají správně do/z UTF-8. Například ó => ó vypadá, že data UTF-8 (kde jeden znak může být rozložen do různého počtu bajtů) jsou vám prezentována pomocí jednobajtového evropského kódování, jako je ISO-8859-15 nebo MS- CP-1451 nebo podobný.
Jste pravděpodobně správné ukládání dat, ale načítání to nesprávně. Pokud právě používáte mysql
terminálový program nebo podobný, ujistěte se, že váš terminál je nastaven na používání UTF-8 (v systému Unix/Linux locale
by pravděpodobně mělo být něco končící na .utf8
, např. můj má LANG=en_US.utf8
)
Pokud stahujete data pomocí nástroje GUI nebo podobného, zkontrolujte znakovou sadu na panelu Nastavení/Předvolby.
Pokud dostáváte špatně přeložené znaky zpět do aplikace, kterou jste napsali, podívejte se na nástroje vašeho jazyka pro nastavení národního prostředí. (Možná, že INSERT
rutiny to mají správně, ale SELECT
rutiny to mají špatně?)
A pokud se to posílá na web, ujistěte se, že vaše soubory (XML|HTML|XHTML) mají charset=utf8
deklarováno na příslušném místě (místech), nebo přeložte zpět z UTF-8 do znakové sady vašeho dokumentu (pokud je to možné) pomocí něčeho jako iconv
při vkládání textu z databáze. (Většina znakových sad jiných než Unicode může samozřejmě představovat pouze podmnožinu Unicode; např. sada ISO-8859-15 odvádí slušnou práci při pokrytí evropských jazyků, ale nemá žádnou podporu pro systémy psaní cyrilice, arabštiny nebo CJK, takže je možné selhat při překladu znaku.) V Perlu můžete použít předávací argumenty k open
nebo použijte binmode
k nastavení transparentní vrstvy překladu znakové sady na streamu "filehandle".