将UTF-16转换为UTF-8后看到中文字母

时间:2018-10-29 08:57:19

标签: php arrays csv utf-8 utf-16

我有一个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"
  ]
]

0 个答案:

没有答案