簡體   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