使用php读取csv时UTF-16LE字符的问题



我有一个php脚本,读取csv文件(它有UTF-16LE编码)。问题是,在几行php数组阅读的csv倒塌是因为一些希腊字符。一个例子是下面(数组中有7个元素,而下面只有2个),我如何解决这个问题?

阵列([0] =比;205198[1] =比;4.2 Βάση για Σ█)

我的代码在下面

$array = file_get_contents($this->listUrl);      
$array = mb_convert_encoding($array, 'UTF8', 'UTF-16LE');   // Convert the file to UTF8
$array = preg_split("/R/", $array);                        // Split it by line breaks       
$array = array_map(function ($v) {
return str_getcsv($v, ";");
}, $array);

[edit]我使用了下面的代码

$array = str_getcsv($array, "n");
foreach ($array as &$Row) {
$Row = str_getcsv($Row, ";");          
}

我最好的办法是:

你需要mb_split,因为您正在使用多字节字符串

一些理论:

UTF-8,加上著名的ASCII = 1字节。

支持所有unicode字符的UTF-16 = 4字节。

一些动作:

"mb_split -使用正则表达式拆分多字节字符串":PHP: mb_split

还有与mb_ereg_replace类似的函数.

例子:

$array = file_get_contents($this->listUrl);      
$array = mb_convert_encoding($array, 'UTF8', 'UTF-16LE');   // Convert the file to UTF8
$array = mb_split("/R/", $array);                        // Split it by line breaks       
$array = array_map(function ($v) {
return str_getcsv($v, ";");
}, $array);

玩得开心

最新更新