UTF-8 е (обикновено) „безопасно“ кодиране за всеки набор от знаци в света. (Не винаги е най-ефикасният и има някои аргументи, които трябва да се направят, че Unicode не представя CJK скриптовете със своя модел „унифициран хан“, но продължаваме напред...)
Въпреки това е вероятно вашата интерфейсна програма(и) да не се превежда правилно към/от UTF-8. Например, ó => ó изглежда, че данните UTF-8 (където един знак може да бъде разпределен в различен брой байтове) ви се представят с помощта на еднобайтово европейско кодиране, като ISO-8859-15 или MS- CP-1451 или подобен.
Вие сте вероятно съхраняване на данните правилно, но зареждане то неправилно. Ако просто използвате mysql
терминална програма или подобна, уверете се, че вашият терминал е настроен да използва UTF-8 (на Unix/Linux система, locale
вероятно трябва да е нещо, завършващо на .utf8
, напр. моят има LANG=en_US.utf8
)
Ако изтегляте данни с помощта на GUI инструмент или подобен, проверете неговия панел Настройки/Предпочитания за набора от знаци.
Ако връщате неправилно преведените знаци обратно в приложение, което сте написали, вижте инструментите на вашия език за настройка на локала. (Може би INSERT
рутините са правилни, но SELECT
рутините не са правилни?)
И ако това се изпраща в мрежата, уверете се, че вашите (XML|HTML|XHTML) файлове имат charset=utf8
декларирани на подходящите места, или преведете обратно от UTF-8 към набора от знаци на вашия документ (ако е възможно), като използвате нещо като iconv
при вмъкване на текст от базата данни. (Повечето набори от символи, различни от Unicode, могат да представляват само подмножество на Unicode, разбира се; например наборът ISO-8859-15 върши прилична работа при покриването на европейски езици, но няма поддръжка за системи за писане на кирилица, арабски или CJK, така че възможно е да не успеете да преведете символ.) В Perl можете да използвате аргументи за предаване за open
или използвайте binmode
за да настроите прозрачен слой за превод на набор от знаци върху поток "filehandle".