PHP:数据不在同一个字符集中

时间:2016-06-15 11:50:53

标签: php csv encoding utf-8

所以我一直在努力解决这个问题,并没有找到解决方案。

我的问题是我正在从API生成CSV,并且它中有一些克罗地亚标志。它进展顺利,我使用此功能生成CSV文件

function generateCSV($arr, $option) {
   if ($option == 'Products') {
        $fp = fopen('csv/products.csv', 'w');

        foreach ($arr as $key => $value) {
            fputcsv($fp, $value, ";");
        }
    }
}

当我不得不从另一台服务器上的CSV文件中提取数据并将其包含在方程式中时,会出现问题。我认为该文件的编码搞砸了。

我的CSV看起来像这样

参考|名字|随机列..... |描述

描述部分是我从其他服务器的其他CSV文件中包含的部分。我将其保存到文件的部分代码在这里:

function generateDescriptionCSV(){
    $ch = curl_init('http://www.---.hr/---/--/Proizvodi.csv');
    $fp = fopen('csv/products_descriptions.csv', 'w');

    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    curl_exec($ch);
    curl_close($ch);
    fclose($fp);
}

所以我需要数据来源。一个是API提供的数据库调用,第二个是我使用CURL生成的文件。当我将这些数据粘合在一起时,来自API的数据显示正常,而来自外部CSV的数据看起来没问题,除了在这种情况下非常重要的克罗地亚标志。

当我尝试使用UTF-8编码在Excel中打开最终的CSV文件时,我得到类似的结果。

  

05-120000 Mozaik plo č a sa dodacima,23x17,5x4,8 c 59.99 64 KREATIVNI   SETOVI,PRIBOR ZA IZRADU Spol:Žsetza slaganje mozaik slika,set se   sastoji od plo?e za nabadanje 16x21 cm,192 komada nabadalica raznih   boja i oblika,te posudice koja zajedno s plo?om?ini kofer?i? ZA   spremanje nabadalica(18x23x4 cm)

问号应与上述字符完全相同,即č

当我在记事本中打开最终的CSV文件和外部打开然后尝试“另存为”它们来查找第一个文件的文件编码时,我得到UTF-8,第二个文件是ANSI

有什么建议吗?

修改

我尝试通过mb_detect_encoding调用输出编码,这就是我提出的

http://shorttext.com/7a59c8f1

第一行是来自API源的数据,第二行是来自外部CSV的数据。当我使用Excel从文本导入打开外部CSV时,文件原点被检查为1250:中欧(Windows),当我将其更改为UTF-8时,每个特殊符号都显示为此符号 。 当我尝试打开最终生成的CSV文件时,文件来源被检查为8592:来自api的中欧(ISO)特殊标志正常显示,而来自该外部CSV的标志显示为 。

也许这有助于指出问题所在

1 个答案:

答案 0 :(得分:0)

我终于使用此函数iconv('windows-1250','UTF-8', $data[33]);解决了我的问题,将字符串的编码更改为UTF-8