【问题标题】:PHP : Unknown encoding in CSV filePHP:CSV文件中的未知编码
【发布时间】:2014-08-17 01:30:07
【问题描述】:

我对编码问题有点陌生

我有从客户端获取的 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获取错误字符的十六进制值我可以说�字符实际上在文件中,编码问题是客户端

【问题讨论】:

  • 你能使用显示每个字符的十六进制值的编辑器吗?然后发回é 和其他有问题的值的结果,这将有助于我们猜测编码。
  • 告诉我们 CSV 文件数据应该使用什么语言(英语、法语、中文……随便),然后我们才能为您的数据找到正确的编码方案
  • 如果您致力于测试编辑器中所有可用的编码方案,请先复制原始文件,这将导致不可逆转的数据丢失
  • @TimPietzcker : vim "ga" 命令返回 65533, Hexa fffd, Octal 177775
  • @TimPietzcker :我猜这意味着文件本身包含 � 字符并且编码问题是客户端的。

标签: php csv encoding utf-8


【解决方案1】:

您需要知道文件的编码是什么。如果您不知道,请尝试将文档视为一堆不同的编码(例如,在某些文本编辑器中,您可以选择 File → Reopen using Encoding... 或类似的操作) , 直到你找到对文件有意义的编码。

那个,或者将文件从不同的编码转换为您喜欢的编码。只是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

【讨论】:

  • 关于编码的经典文章每个人都应该阅读! +1 链接
  • 嗯,我写得太快了:s 我只是想添加 mb_convert_encoding($string, "UTF-8") 将从内部编码(在我的情况下为 ISO-8859-1)编码为UTF-8。因此它相当于 utf8_encode() 解决了我的大部分编码问题
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 2015-03-20
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多