Преобразование файла UCS-2 в UTF-8 с помощью PHP

У меня есть файл 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);