繁体   English   中英

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

[英]Problem with UTF-16LE characters reading csv with php

我有一个读取 csv 文件的 php 脚本(它具有 UTF-16LE 编码)。 问题在于,在某些行中,读取 csv 行的 php 数组由于某些希腊字符而被折叠。 一个例子是波纹管(数组中有 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);

[编辑]我使用了下面的代码

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

我最好的选择是:

您需要mb_split ,因为您正在处理多字节字符串以支持 GR lang。

一些理论:

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);

玩得开心 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM