Неожиданный результат от 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 обнаружение кодирования всегда будет неудачным.