Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在读取CSV文件时修复编码?_Php_Csv_Encoding_Utf 8 - Fatal编程技术网

Php 如何在读取CSV文件时修复编码?

Php 如何在读取CSV文件时修复编码?,php,csv,encoding,utf-8,Php,Csv,Encoding,Utf 8,我正在用php阅读一个CSV文件,据我所知,这类文件可以使用hoomans omg发明的任何编码,等等。。。我想我有一个MacRoman ANSI编码的CSV,我在Mac上工作 到目前为止,还不错(一点都不好,但这是另一个话题)。。现在,在遍历这些行时,我得到了如下值: Z�rich 显然,它应该是“Zürich”——“Zü”不见了 现在,我几乎什么都试过了。。mb_detect_编码是“false”,所以他不明白它是什么 然后我在这里找到了塞巴斯蒂安·格里格诺利的天才课程-> 看起来不错,但

我正在用php阅读一个CSV文件,据我所知,这类文件可以使用hoomans omg发明的任何编码,等等。。。我想我有一个MacRoman ANSI编码的CSV,我在Mac上工作

到目前为止,还不错(一点都不好,但这是另一个话题)。。现在,在遍历这些行时,我得到了如下值:

Z�rich
显然,它应该是“Zürich”——“Zü”不见了

现在,我几乎什么都试过了。。mb_detect_编码是“false”,所以他不明白它是什么

然后我在这里找到了塞巴斯蒂安·格里格诺利的天才课程->

看起来不错,但是。。。我得到的只是:

ZŸrich
不是我所期望的那样:D

现在我发现,“utf8_编码”会以某种方式工作,它会生成:

Z\u009Frich

但是。。现在怎么办?如果我把它直接放在数据库中,最终的值是“Zrich”,这意味着它仍然不是真正的UTF-8,或者db只是在与转义的变体斗争?当我对那个值进行mb_-detect_编码时,他现在说“UTF-8”。。美好的但我怎么能走得更远呢?如何在UTF-8中以正确的方式获得“Zürich”?

您可能可以使用
iconv
进行转换。在我的安装中,MacRoman编码被简单地称为“MAC”:


您可能可以使用
iconv
进行转换。在我的安装中,MacRoman编码被简单地称为“MAC”:


尝试先用iconv转换所有文件。然后再导入。 或者迭代每一行并使用iconv进行转换


您必须知道文件的原始编码。

首先尝试使用iconv转换所有文件。然后再导入。 或者迭代每一行并使用iconv进行转换


您必须知道文件的原始编码。

存储这些值的数据库列的编码是什么?在我的应用程序中创建表格时,将字符集更改为utf8。从表格到代码再到浏览器,所有内容都是utf-8-所有内容。。这里的问题发生在我读取由用户上传的文件时,该文件是由MS Excel在任何客户端计算机上创建的,因此,该文件可以在所有内容中编码,对此我没有控制权:/(来源:)存储这些值的数据库列的编码是什么?在我的应用程序中创建表格时,将字符集更改为utf8。从表格到代码再到浏览器,所有内容都是utf-8-所有内容。。这里的问题发生在我读取由用户上传的文件时,该文件是由MS Excel在任何客户机上创建的,因此,该文件可以在所有内容中进行编码,而我无法控制:/(来源:)iconv甚至可以直接更正Z中的文本�rich to Zürich-但是你必须知道当mb_detect_编码总是返回“false”时,编码是非常困难的->所以我写了我自己的detect lik,在这里描述:很难区分单字节编码,因为每个字节序列都是有效的,不同于可变字节编码。如果你没有关于文本来源的任何信息,你必须根据字母或n-gram频率进行猜测。听起来很有趣,目前我已经实现了一种疯狂的猜测,就像php文档注释中描述的那样,但我必须用谷歌搜索你写的东西;)iconv甚至可以直接从Z更正文本�rich to Zürich-但是你必须知道当mb_detect_编码总是返回“false”时,编码是非常困难的->所以我写了我自己的detect lik,在这里描述:很难区分单字节编码,因为每个字节序列都是有效的,不同于可变字节编码。如果你没有关于文本来源的任何信息,你必须根据字母或n-gram频率进行猜测。听起来很有趣,目前我已经实现了一种疯狂的猜测,就像php文档注释中描述的那样,但我必须用谷歌搜索你写的东西;)
$city = "Z\x9frich";
$city = iconv("MAC", "UTF-8", $city); 
echo $city; // Output: Zürich