php - 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");
解决方案
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 中,或者“字节顺序标记”,您的服务器可以读取)。第二种方法可能看起来对用户不友好(确实如此),但它可以帮助您确定数据损坏的位置。
推荐阅读
- css - 如何修复 Y 轴滚动条在具有固定页脚的引导可滚动内容布局中翻倍?
- c++ - 使用按位计算日志
- javascript - 当变量在 jest 测试用例中转换时,它会被提升吗?
- .net-core - F#:如何测试另一个项目的内部模块?
- python - python和ctypes,ctypes从嵌套结构返回错误的浮点值
- kubernetes - 如何为服务 GRPC 配置 haproxy-ingress
- c# - 如何在 C# PropertyGrid 中编辑 StringCollection?[“找不到'System.string'类型的构造函数”]
- python - 在 Mac 上安装 python 2.6
- d - 如何声明一组红黑树?
- python - FB Auto Group 海报与 Python 中的 Selenium