【发布时间】:2019-08-14 21:00:53
【问题描述】:
所以我有这个文件 (http://mountainmarathon.ch/components/com_chronoconnectivity6/chronoconnectivity/uploads/20190814194827_classifica-cat-standard-3.csv),它“应该”用 utf-8 编码。当我尝试通过 fgetcsv 或 file_get_contents 读取内容时,我得到了那些带有问号的黑色菱形,每个 ä,ö,ü 字符。
我已经知道这是一个编码问题,但据我所知,一切都是 / 应该是 utf-8 并且 utf-8 应该能够显示 ä,ö,ü,对吧?
我已经在这里检查了很多可能的解决方案,但没有找到任何解决方案。当我用记事本++打开文件时,钻石出现了同样奇怪的问题(即使我尝试更改编码 - 然后它变成了一个矩形)。 - 所以它的文件?
不,当我在我的 iphone(内部邮件应用程序)上打开 csv 文件时,特殊字符 ä,ö,ü 会正确显示。
到目前为止,我尝试的是来自不同堆栈溢出解决方案的不同 mb_convert_encoding 解决方案,但它们都不起作用。
我认为这个文件确实有些不正确,但为什么 iPhone 能够正确呈现内容?
有更多了解的人可以检查文件并告诉我如何通过 PHP 导入/使用其内容并摆脱那些编码问题吗?
标头通过以下方式设置为 UTF-8 header('Content-Type: text/html; charset=utf-8');
在终端“文件 -I 文件”中返回 UTF-8
我尝试了两台服务器(我的 mamp 使用 php7.3.1 和 webserver 使用 php7.x)
很抱歉,我不会发布过去三个小时以来我在此处和其他平台上检查过的每个问题的每个链接。是的,当然我已经在 php 手册(fgetcsv、mb_encode / check、utf8_encode / decode...等等)上检查了很多信息和 cmets,但没有找到解决我问题的方法。
最后,我针对这个函数检查了我的字符串(从文件获取内容):https://www.php.net/manual/de/function.mb-check-encoding.php#95289,它返回 FALSE。
现在没有任何意义了。
重现的代码很简单:
$content = file_get_contents($url);
var_dump($content);
我们如何才能将特殊字符显示为 ä,ö,ü 而不是带有问号的黑色菱形。
更新
根据您的分析,我检查了文件保存的具体情况。
首先:我通过电子邮件收到 csv,据我所知,它在 iso-8859-1 中
iOS 场景如下所示: 我在邮件应用程序中打开邮件并直接在邮件应用程序中显示 csv -> 一切正常。 接下来我通过邮件应用程序将文件导出到我的onedrive中->检查以在手机上打开文件->一切正常。 现在我可以通过文件 -I 检查我的 mac 上的字符集,它是 iso-8859-1。
当我现在尝试使用这个文件和 php 的 utf8_encode 时 --> 一切都很好。
所以现在我必须了解之前出了什么问题,因为这是 MacOS 场景:
我打开(相同的)邮件并将相同的 src 文件保存到我的硬盘驱动器上,快速检查文件 - 我现在将 UTF-8 作为字符集。
在装有 Outlook 的 windows 机器上,保存文件,在记事本中打开字符被替换:ä=>d, ü=>|, ...
我现在认为 - 向我们发送此 csv 的人必须将文件导出为 utf-8,对我来说它看起来像它的 iso-8859-1,并且计算机在保存文件时会做一些奇怪的事情是这可能吗?
【问题讨论】:
-
您发布的网址中的文件已损坏。