Неожиданный результат от mb_detect_encoding с Windows-1252

Я прочитал статью в Википедии о кодировке символов Windows-1252. Для символов, чье значение байта < 128, оно должно совпадать с ASCII/UTF-8.

Это имеет смысл:

php -r "var_export(mb_detect_encoding(\"\x92\", 'windows-1252', true));" 'Windows-1252'

Левый кудрявый апостроф обнаружен правильно.

php -r "var_export(mb_detect_encoding(\"a\", 'windows-1252', true));" false

А? Буква "а" не Windows-1252?

Мой терминал, на котором я запускаю это, настроен на UTF-8. Так что это должна быть та же последовательность байтов, что и в ASCII для буквы "а". Ради минимизации переменных, если я укажу правильную Windows-1252 последовательность байтов:

php -r "var_export(mb_detect_encoding(\"\x61\", 'windows-1252', true));" false

Изменение "строгого" параметра (который имеет довольно бесполезную документацию) ничего не делает в этих случаях.

1 ответ

Решение

Обнаружение кодировки не поддерживается для windows-1252, Согласно документации mb_detect_order:

В настоящее время mbstring реализует следующие фильтры обнаружения кодирования. Если для следующих кодировок существует недопустимая последовательность байтов, обнаружение кодировки завершится неудачно.

UTF-8, UTF-7, ASCII, EUC-JP, SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP

Для ISO-8859-mbstring всегда определяется как ISO-8859-.

Для UTF-16, UTF-32, UCS2 и UCS4 обнаружение кодирования всегда будет неудачным.

Другие вопросы по тегам