我有一个UTF-16编码的.CSV文件。字段定界符是逗号(,),字符串定界符是双引号(“)。在PHP外部更改编码不是一种选择。我需要将其转换为与PHP关联的数组。但是我似乎无法得到它可以识别UTF-16编码。
这是 numbers.csv 的文件内容:
"Phone number"
"+1 55500718"
"+1 55551919"
我已经成功上传了这样的文件(使用Laravel框架)
$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"
]
]