所以我一直在努力解决这个问题,并没有找到解决方案。
我的问题是我正在从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
调用输出编码,这就是我提出的
第一行是来自API源的数据,第二行是来自外部CSV的数据。当我使用Excel从文本导入打开外部CSV时,文件原点被检查为1250:中欧(Windows),当我将其更改为UTF-8时,每个特殊符号都显示为此符号 。 当我尝试打开最终生成的CSV文件时,文件来源被检查为8592:来自api的中欧(ISO)特殊标志正常显示,而来自该外部CSV的标志显示为 。
也许这有助于指出问题所在
答案 0 :(得分:0)
我终于使用此函数iconv('windows-1250','UTF-8', $data[33]);
解决了我的问题,将字符串的编码更改为UTF-8