PHP:CSV文件中的未知编码

时间:2014-06-26 09:00:12

标签: php csv encoding utf-8

我对编码问题不熟悉

我有来自客户端的CSV文件,无法弄清楚它是如何编码的

当我尝试使用mb_convert_encoding($ string,“UTF-8”)或utf8_encode($ string)将它们编码为utf8时,我的“é”重音符号在vim或openoffice中显示为 ,我得到“� “

我用iconv和mb_convert_encoding尝试了一些拉丁语编码(ISO-8859-1,ISO-8859-15)到utf8

我还尝试了一种方法,我发现从cp1250转换为utf8,另一种从macintosh转换为utf8

仍然没有运气。有没有办法找到解决方案而不要求客户端将其csv编码更改为utf8?

非常感谢!

修改 为了找到正确的编码,我解析了mb_list_encodings()中列出的所有编码,并试图用它们中的每一个转换为UTF-8。 它们都不能呈现“é”。我只是要求客户在出口他的csv时使用utf-8

使用vim获取错误字符的十六进制值我可以说 字符实际上在文件中,编码问题是客户端

1 个答案:

答案 0 :(得分:2)

你需要知道文件的编码是什么,句号。如果您不知道,请尝试将文档视为一堆不同的编码(例如,在某些文本编辑器中,您可以选择文件→使用编码重新打开... 或类似的此类操作) ,直到找到该文件有意义的编码。

那,或者将文件从不同的编码转换为您的首选编码。只是mb_convert_encoding($string, "UTF-8")无济于事,它不能神奇地猜测从转换的内容。尝试:

echo mb_convert_encoding($string, 'UTF-8', 'ISO-8859-1');
echo mb_convert_encoding($string, 'UTF-8', 'SJIS');
...

直到找到文档看起来正确的编码。

如果所有猜测都没有帮助,请让文档的发起人注意他们正在使用的编码,或者明确告诉他们如何为您提供所需编码的文档。

阅读What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text