Pilihannya bukan antara ASCII dan UTF-8. ASCII adalah pengodean 7-bit, dan UTF-8 menggantikannya - teks ASCII yang valid juga valid UTF-8. Masalah muncul ketika Anda menggunakan karakter non-ASCII; untuk ini Anda harus memilih antara UTF-8, UTF-16, UTF-32, dan berbagai pengkodean 8-bit (ISO-xxxx, dll.).
Solusi terbaik adalah tetap menggunakan charset ASCII yang ketat, yaitu, jangan gunakan karakter non-ASCII dalam kode Anda. Sebagian besar bahasa pemrograman menyediakan cara untuk mengekspresikan karakter non-ASCII menggunakan karakter ASCII, misalnya "\u1234"
untuk menunjukkan titik kode Unicode pada 1234. Terutama, hindari menggunakan karakter non-ASCII untuk pengidentifikasi. Bahkan jika mereka bekerja dengan benar, orang-orang yang menggunakan tata letak keyboard yang berbeda akan mengutuk Anda karena membuat mereka mengetik karakter ini.
Jika Anda tidak dapat menghindari karakter non-ASCII, UTF-8 adalah taruhan terbaik Anda. Tidak seperti UTF-16 dan UTF-32, ini adalah superset dari ASCII, yang berarti siapa pun yang membukanya dengan pengkodean yang salah mendapatkan paling tidak sebagian besar benar; dan tidak seperti codepage 8-bit, ia dapat menyandikan setiap karakter yang Anda perlukan, secara jelas, dan tersedia di setiap sistem, terlepas dari lokal.
Dan kemudian Anda memiliki encoding yang diproses oleh kode Anda; ini tidak harus sama dengan penyandian file sumber Anda. Sebagai contoh, saya dapat dengan mudah menulis PHP di UTF-8, tetapi mengatur multibyte-encoding internal untuk, katakanlah, Latin-1; karena parser PHP tidak mementingkan penyandian sama sekali, tetapi hanya membaca urutan byte, literal string UTF-8 saya akan disalahartikan sebagai Latin-1. Jika saya output string ini pada terminal UTF-8, Anda tidak akan melihat perbedaan, tetapi panjang string dan operasi multibyte lainnya (misalnya substr
) akan menghasilkan hasil yang salah.
Aturan praktis saya adalah menggunakan UTF-8 untuk semuanya; hanya jika Anda benar-benar harus berurusan dengan penyandian lain, konversi ke UTF-8 sedini mungkin dan dari UTF-8 selambat mungkin.