Как определить кодировку MacRoman в PHP? - PullRequest
0 голосов
/ 28 октября 2018

PHP mb_detect_encoding() не понимает кодировку MacRoman. Мое приложение позволяет пользователям загружать данные в формате CSV, и мне нужно преобразовать их в UTF8, потому что пользователи не разбираются в технологиях. Я никогда не смогу заставить их всех понять, как это сделать, и контролировать их кодирование.

Вот что я делаю:

$encoding_detection_order = array('UTF-8', 'UTF-7', 'ASCII', 'ISO-8859-1', 'EUC-JP', 'SJIS', 'eucJP-win', 'SJIS-win', 'JIS', 'ISO-2022-JP', );

$encoding = mb_detect_encoding($value, $detection_order, true);

$converted_value = iconv($encoding, 'UTF-8//TRANSLIT', $value);

Это прекрасно работает в большинстве ситуаций, но если мой пользователь работает на Mac и сохраняет CSV в кодировке MacRoman, то приведенный выше код обычно ошибочно определяет текст как ISO-8859-1, что приводит к тому, что iconv() производить плохой вывод.

Например, значение acnted-e в Jaimé имеет шестнадцатеричное значение 0x8e в MacRoman. В ISO-8859-1 символ 0x8e равен Ž, и поэтому, когда я преобразую его в utf8, я просто получаю версию utf8 Ž, когда мне нужно получить é.

enter image description here

Мне нужно иметь возможность динамически отличать MacRoman от других кодировок, чтобы правильно преобразовать его.

...