我有一个使用lettersØÅ等丹麦字母的.tsv文件。
该文件使用file_get_contents();
在php中上传
然后处理并进行mysqli查询。
我尝试将<?php header('Content-Type: text/html; charset=utf-8'); ?>
放在代码的最顶部。
也使用元标记<meta charset="UTF-8">
在我的SQL中,创建的行如下:
text COLLATE utf8_danish_ci NOT NULL
和:
PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT
和:
$conn->set_charset("utf8");
...。但是仍然没有运气。
如果我在excel中打开.tsv文件,则它会正确显示ÆØÅ。但是在Mac上使用“ TextEdit”打开时。 “ÆØÅ”显示为“¯¯¯¯”
更新-解决方案,因为接受的答案是指我应该使用CP1252
:
mb_convert_encoding($fileEndEnd, 'HTML-ENTITIES', "CP1252");
答案 0 :(得分:2)
使用UTF-8需要考虑很多事情。但我看到您的这一特别评论...
如果我在excel中打开.tsv文件,则它会正确显示ÆØÅ。但是在Mac上使用“ TextEdit”打开时。 “ÆØÅ”显示为“¯¯¯¯”
问题...
如果您正在谈论MicroSoft Excel,那么您应该知道上面的字符都在UTF-8字符集和LATIN_1_SUPPLEMENT字符集(通常称为CP1252)中。看看:LATIN_1_SUPPLEMENT Block
如果要保存此文档,而未将其编码设置为UTF-8,则Windows将没有理由将此文本从CP1252转换为UTF-8。但这就是您需要做的。
可能的解决方案...
在服务器上:您可以尝试将任何Windows字符集或“未知”字符集从CP1252解码为UTF-8。 (由于Windows将“根据系统默认值”保存文档,因此该信息在打入Linux服务器时可能会消失。)
在提交者的计算机上:您可以通过让用户在生成文档的任何编辑器中调整其UTF-8设置来解决此问题(将其文档编码为UTF-8,这会将这些信息存储在文档BOM中,或“字节序标记”,您的服务器可以读取)。第二种方法似乎对用户不友好(的确是肯定的),但是它可以帮助您确定数据损坏的位置。