От куда берется информация о кодировки файла?

Есть текстовый файл в кодировки UTF-8, который содержит как латинский набор символов, так и кириллический. При попытке открыть такой файл программой Notepad++ кириллические символы отображаются кракозябрами.

Вопрос: почему так происходит?

Ответ: в начале файла отсутствует байтовая последовательность EF BB BF, по которой определяется кодировка UTF-8. Соответственно, не найдя этой последовательность, Notepad++ открывает такой файл в кодировки по умолчанию, которой является ANSI.

Вот как должно быть правильно:

urf-8_byte_charset

[Chrome] Проблема с кодировкой страницы

В мобильном браузере Chrome для iOS (build 23.0.1271.91) может наблюдаться проблема с корректным выбором кодировки:

UPD: проблема исправлена в новой минорной сборке (23.0.1271.96).

strlen() и UTF-8

Долго искал причину появления знака вопроса в выводимых символах у себя на сайте. Оказалось, что для вывода в PHP-скрипте используется функция substr(), которая работает с однобайтными кодировками, а ведь данные у меня хранятся в UTF-8, где символ занимает два байта — вот поэтому-то некоторые символы «режутся» посередине и получаются такие знаки.

Решение: вместо substr() использовать функцию mb_substr().