use utf8
на самом деле не имеет к этому никакого отношения - почти никто не использует юникод-идентификаторы, и программа может легко распознавать кодировку, даже не включая строковые литералы UTF-8 в код.
Но да, лучшая из известных мне мудростей для работы с кодировками такова:
- Всегда знайте, откуда поступают ваши данные и как они форматируются, и декодируйте их как можно скорее (если только они не предназначены для обработки в байтах).
- Всегда понимайте формат данных, в который вы пишете, или что ожидает ваш клиент, и кодируйте на выходе (если ваши данные уже не являются байтами).
- И когда дело доходит до текста, всегда работайте со строками символов во "внутреннем пространстве" вашей программы.
Само существование миллиона различных наборов символов и миллиона различных кодировок должно быть как можно более подробным описанием интерфейса . Есть некоторые вещи, которые вы все равно должны иметь в виду - например, различные параметры сортировки для разных языков - но в любом случае это идеальный вариант, и следование ему, насколько это возможно, должно значительно уменьшить количество «проблем кодирования» в вашем коде.
Чтобы ответить на ваш вопрос более прямо, да - если вы читаете текстовые данные извне без декодирования или отправляете данные куда-либо без кодирования, очень велика вероятность того, что вы допустили ошибку и ваш код будет перерыв, когда кто-то другой использует его в локали, отличной от вашей.