Вибір не між ASCII та UTF-8. ASCII - це 7-бітове кодування, і UTF-8 замінює його - будь-який дійсний текст ASCII також є дійсним UTF-8. Проблеми виникають при використанні символів, що не належать до ASCII; для цього вам потрібно вибрати між UTF-8, UTF-16, UTF-32 та різними 8-бітовими кодуваннями (ISO-xxxx тощо).
Найкраще рішення - дотримуватися суворої діаграми ASCII, тобто просто не використовуйте жодних символів, що не належать до ASCII, у вашому коді. Більшість мов програмування надають способи вираження символів, що не належать до ASCII, за допомогою символів ASCII, наприклад, "\u1234"
для позначення точки коду Unicode у 1234. Особливо, уникайте використання символів, що не належать до ASCII, для ідентифікаторів. Навіть якщо вони працюють правильно, люди, які використовують іншу розкладку клавіатури, будуть проклинати вас за те, що вони змушують вводити цих символів.
Якщо ви не можете уникнути символів, що не належать до ASCII, UTF-8 - найкраща ставка. На відміну від UTF-16 і UTF-32, це супернабір ASCII, а це означає, що кожен, хто відкриває його з неправильним кодуванням, отримує принаймні більшість прав; і на відміну від 8-бітових кодових сторінок, він може кодувати близько кожного символу, який вам коли-небудь знадобиться, однозначно, і він доступний у будь-якій системі, незалежно від місцевості.
І тоді у вас є кодування, яке обробляє ваш код; це не повинно бути таким же, як кодування вихідного файлу. Наприклад, я можу легко записати PHP в UTF-8, але встановити його внутрішнє багатобайтове кодування на, скажімо, латинську-1; оскільки аналізатор PHP взагалі не стосується кодування, а просто читає байтові послідовності, мої літеральні рядки UTF-8 будуть неправильно трактуватися як латинська-1. Якщо я вивести ці рядки на термінал UTF-8, ви не побачите жодних відмінностей, але довжина рядків та інші багатобайтові операції (наприклад substr
) дадуть неправильні результати.
Моє правило - використовувати UTF-8 для всього; тільки якщо вам абсолютно доведеться мати справу з іншими кодуваннями, перетворіть на UTF-8 якомога раніше, а з UTF-8 якомога пізніше.