Мне нужно быть в состоянии обнаружить кодировку строки, но mb_detect_encoding не работает.
Я получаю строку из файла (file_get_contents
) и я знаю, что файл, который доставлял мне неприятности, был в UTF-16 LE. Однако из документов я понимаю, что обнаружить эту кодировку невозможно (mb_detect_order : «Для UTF-16, UTF-32, UCS2 и UCS4 обнаружение кодирования всегда будет неудачным.»).
Как я могу получить кодирование строки надежным способом в PHP? Любая возможная кодировка?
Я потерял несколько часов, пытаясь решить эту проблему, но не нашел хорошего ресурса. Я хотел бы иметь возможность автоматизировать это, поэтому, если мой файл изменит свою кодировку, моя программа сможет обработать его (я получаю файл с другого веб-сайта).
Я попробовал это безуспешно, он говорит мне UTF-8:
mb_detect_encoding($proper_string, 'UTF-16LE,UCS-2,UTF-8,ASCII', true)
Я также попробовал это:
echo 'mb_check_encoding($fileContents, \'UTF-8\'): ' . mb_check_encoding($fileContents, 'UTF-8') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'UTF-16\'): ' . mb_check_encoding($fileContents, 'UTF-16') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'UTF-16LE\'): ' . mb_check_encoding($fileContents, 'UTF-16LE') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'UCS-2\'): ' . mb_check_encoding($fileContents, 'UCS-2') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'ISO-8859-1\'): ' . mb_check_encoding($fileContents, 'ISO-8859-1') . "\n";
//true
Задача ещё не решена.
Других решений пока нет …