sql或php无法正确显示丹麦字母ÆØÅ

时间:2018-10-01 19:37:06

标签: php mysqli

我有一个使用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");

1 个答案:

答案 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中,或“字节序标记”,您的服务器可以读取)。第二种方法似乎对用户不友好(的确是肯定的),但是它可以帮助您确定数据损坏的位置。