Как отличить кодировки MacRoman и Windows-1251 в PHP?


Я уже несколько дней дергаю себя за волосы. Я много гуглил и безрезультатно копил.

Я импортирую некоторые данные из csv-файла. Этот CSV-файл создается в Excel либо на Windows, либо на Mac, что дает 2 разных кодировки "Windows-1251" и "MacRoman". Оба варианта из ISO-8859-1 и mb_detect_encoding dos не помогают: он всегда определяет первую кодировку, которую я включаю в список.

Например:

mb_detect_encoding($buffer, 'macroman, windows-1251, UTF-8');

Даст "макроман".

С та же строка, попытка:

mb_detect_encoding($buffer, 'windows-1251, macroman, UTF-8');

Выдаст "окно-1251".

Итак, как вы можете правильно изменить ситуацию? Мне нужно преобразовать мою входную строку (содержимое файла csv) в utf-8 для вставки в БД.

Может быть, я что-то упускаю? Как вам, ребята, обычно удается анализировать csv-файлы и правильно сохранять данные в БД (utf8).

Спасибо за любую подсказку!

Author: David A Gibson, 2011-04-26

1 answers

Я думаю, что единственный способ убедиться, что это обрабатывается должным образом, - это в первую очередь определить процесс сохранения csv-файла. Тогда вам просто нужно кодировать utf8_encode то, что приходит, и все будет хорошо...

 0
Author: mlarcher, 2011-04-27 09:33:07