首页 > 解决方案 > sql 或 php 未正确显示丹麦字母 Æ Ø Å

问题描述

我有一个使用丹麦字母 Æ Ø Å 的 .tsv 文件。该文件在 php 中上传,file_get_contents(); 然后处理并生成 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”打开时。"Æ Ø Å" 显示为 "¯ ¯ ¯"

UPDATE - SOLUTION 作为公认的答案是指我应该使用CP1252

mb_convert_encoding($fileEndEnd, 'HTML-ENTITIES', "CP1252");

标签: phpmysqli

解决方案


UTF-8 有很多事情需要考虑。但我看到你的这一特别评论......

如果我在 excel 中打开我的 .tsv 文件,它会正确显示 Æ Ø Å。但是当在 mac 上使用“TextEdit”打开时。"Æ Ø Å" 显示为 "¯ ¯ ¯"

问题...

如果您谈论的是 MicroSoft Excel,那么您应该知道上面的字符都在 UTF-8 字符集和 LATIN_1_SUPPLEMENT 字符集(通常称为 CP1252)中。看一看:LATIN_1_SUPPLEMENT 块

如果您在保存此文档时未将其编码设置为 UTF-8,那么 Windows 将没有理由将此文本从 CP1252 转换为 UTF-8。但这就是你需要做的。

可能的解决方案...

在您的服务器上:您可以尝试将任何 Windows 字符集或“未知”字符集从 CP1252 解码为 UTF-8。(由于 Windows 将“根据系统默认值”保存文档,因此这些信息可能会在它到达您的 Linux 服务器时消失。)

在提交者的计算机上:您可以通过让用户在生成文档的任何编辑器中调整其 UTF-8 设置来解决此问题(将他们的文档编码为 UTF-8,这会导致此信息存储在文档 BOM 中,或者“字节顺序标记”,您的服务器可以读取)。第二种方法可能看起来对用户不友好(确实如此),但它可以帮助您确定数据损坏的位置。


推荐阅读