【发布时间】:2020-04-20 15:15:34
【问题描述】:
我想处理 CSV 文件中的数据,但我发现字母显示不正确。我尝试了数百万种方法来转换编码,但没有任何效果。在 MacOS、PHP 7.4.4 上工作。
在句柄变量上执行fgets() 或fgetcsv() 后,我会得到这个(例如2 行/行)。
Kód ADM;Kód obce;Název obce;Kód MOMC;Název MOMC;Kód MOP;Název MOP;Kód èásti obce;Název èásti obce;Kód ulice;Název ulice;Typ SO;Èíslo domovní;Èíslo orientaèní;Znak èísla orientaèního;PSÈ;Souøadnice Y;Souøadnice X;Platí Od
1234;1234;HorniDolni;;;;;1234;HorniDolni;;;è.p.;2;;;748790401;4799.98;15893971.21;2013-12-01T00:00:00
它或多或少是正确的捷克语,但字母 č 被 è 取代,ř 被 ø 取代,它们都不是捷克字母表的一部分。我有信心,文件中会出现更多错位的字母。
执行file -I path/to/file 我收到file: text/plain; charset=iso-8859-1,这很可悲,因为就wiki 而言,这个字符集不包含捷克语字母。
以下命令都没有转换错位的字母:
mb_convert_encoding($line, 'UTF-8', 'ISO8859-1')
iconv('ISO-8859-1', 'UTF-8', $line)
iconv('ISO8859-1', 'UTF-8', $line)
我注意到ISO-8859-1 中的ø 字母有一个代码00F8。 Windows-1250(包括捷克语 aplhabet)有正确的字母 ř 和代码 0159 但它们前面都有 00F8。与字母č 和è 相同,它们都以代码00E7 开头。我不太了解编码,但似乎文件是在 Windows-1250 中编码的,但解释器认为编码是 ISO-8859-1 并采用原位的字母/代码。
但两种转换(ISO-8859-1 => Windows-1250、ISO-8859-1 => UTF-8 或其他方式)都不起作用。
有人知道如何解决这个问题吗?谢谢!
【问题讨论】:
标签: php utf-8 iso-8859-1 cp1250