У меня есть файл CSV, поставляемый с клиентом, который должен быть проанализирован и вставлен в базу данных с использованием PHP.
Прежде чем вставлять данные в БД, я хочу преобразовать его в UTF-8, но я не могу найти, как это сделать.
Это то, что я пытался обнаружить кодировку файлов:
$ enca -d -L zh ./artigos.txt ./artigos.txt: Universal character set 2 bytes; UCS-2; BMP CRLF line terminators Byte order reversed in pairs (1,2 -> 2,1)
Я пробовал использовать функцию iconv, но это испортило преобразование и показывает результат с разными символами, чем оригиналы.
Первая строка файла (закодированная base64):
IgAwADMAMQAxADkAIgAsACIANwAzADEAMwA
Кажется, что это работает (немного endian), althoug вы не включали никаких символов ascia
$s='IgAwADMAMQAxADkAIgAsACIANwAzADEAMwA'; $t=base64_decode($s); echo iconv('UCS-2LE', 'UTF-8', substr($t, 0, -1));//last byte was invalid
Microsoft Excel CSV, как правило, закодированы в кодировке Little Endian (мне потребовалось много времени, чтобы узнать). Если вы хотите использовать их, например, fgetcsv, вы должны сначала преобразовать файл в UTF-8. Я делаю следующее:
$str=file_get_contents($file); $str= mb_convert_encoding($str, 'UTF-8', 'UCS-2LE'); file_put_contents("converted_".$file, $str);