UTF-8 adalah (umumnya) pengkodean "aman" untuk set karakter apa pun di dunia. (Tidak selalu yang paling efisien, dan ada beberapa argumen yang dibuat bahwa Unicode kurang mewakili skrip CJK dengan model “han terpadu”, tetapi teruskan…)
Namun, sepertinya program antarmuka Anda tidak menerjemahkan ke/dari UTF-8 dengan benar. Misalnya, ó => terlihat seperti data UTF-8 (di mana satu karakter dapat tersebar di berbagai jumlah byte) sedang disajikan kepada Anda menggunakan pengkodean Eropa byte tunggal, seperti ISO-8859-15 atau MS- CP-1451 atau serupa.
Anda mungkin menyimpan data dengan benar, tetapi memuat itu salah. Jika Anda hanya menggunakan mysql
program terminal atau yang serupa, pastikan terminal Anda diatur untuk menggunakan UTF-8 (pada sistem Unix/Linux, locale
mungkin harus sesuatu yang berakhiran .utf8
, misalnya milik saya memiliki LANG=en_US.utf8
)
Jika Anda menarik data menggunakan alat GUI atau serupa, periksa panel Pengaturan/Preferensinya untuk kumpulan karakter.
Jika Anda mendapatkan kembali karakter yang salah diterjemahkan ke dalam aplikasi yang Anda tulis, lihat alat bahasa Anda untuk menyetel lokal. (Mungkin INSERT
rutinitas sudah benar, tetapi SELECT
rutinitas yang salah?)
Dan, jika ini dikirim ke Web, pastikan file (XML|HTML|XHTML) Anda memiliki charset=utf8
dideklarasikan di tempat yang sesuai, atau terjemahkan kembali dari UTF-8 ke kumpulan karakter dokumen Anda (jika mungkin) menggunakan sesuatu seperti iconv
saat memasukkan teks dari database. (Kebanyakan set karakter non-Unicode hanya dapat mewakili subset dari Unicode, tentu saja; misalnya set ISO-8859-15 melakukan pekerjaan yang layak untuk mencakup bahasa-bahasa Eropa, tetapi tidak memiliki dukungan untuk sistem penulisan Cyrillic, Arab, atau CJK, jadi mungkin gagal menerjemahkan karakter.) Di Perl, Anda dapat menggunakan argumen pass untuk open
atau gunakan binmode
untuk menyiapkan lapisan terjemahan kumpulan karakter transparan pada aliran "filehandle".