Я вижу китайские буквы после преобразования UTF-16 в UTF-8 - PullRequest
0 голосов
/ 29 октября 2018

У меня есть файл .CSV в кодировке UTF-16. Разделитель полей - это запятая (,), а разделитель строк - двойные кавычки ("). Изменение кодировки вне PHP не вариант. Мне нужно превратить его в ассоциативный массив с PHP. Но я не могу получить это признать, что кодировка UTF-16.

Вот содержимое моего файла для numbers.csv :

"Phone number"
"+1 55500718"
"+1 55551919"

Я успешно загрузил этот файл (, используя Laravel Framework )

$file = $request->file('numbers-file');
$filename = $file->getPathName();

У меня также есть пользовательская функция csvToAssocArray (), которая превращает ее в ассоциативный массив. Я использую mb_convert_encoding для преобразования UTF-16 в UTF-8.

function csvToAssocArray($filename) {
    $csvAsArray = array_map(function($data) {
        return str_getcsv(mb_convert_encoding($data, 'UTF-8', 'UTF-16'), ",");
    }, file($filename));

    $header = array_shift($csvAsArray);

    $csv = array();

    foreach ($csvAsArray as $row) {
        $csv[] = array_combine($header, $row);
    }

    return $csv;
}

Но конечный результат print_r (csvToAssocArray ($ filename)) выглядит так:

array:3 [▼
  0 => array:1 [▼
    "∀倀栀漀渀攀 渀甀洀戀攀爀∀" => "+1 55500718"
  ]
  1 => array:1 [▼
    "∀倀栀漀渀攀 渀甀洀戀攀爀∀" => "+1 55551919"
  ]
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...