Unicode 字符在客户端显示为编码的 ascii

Posted

技术标签:

【中文标题】Unicode 字符在客户端显示为编码的 ascii【英文标题】:Unicode character is shown as encoded ascii at client side 【发布时间】:2015-10-01 17:45:23 【问题描述】:

我正在尝试使用其 unicode 值(????)显示表情符号。但是我将转义字符串作为\u00f0\u0178\u02dc\u20ac,解码为😀

我在我的项目中使用 mysql 服务器和 php 5.4。在 mysql 中,它存储为😀。有什么办法可以避免这种情况并从 PHP 服务器返回实际的 unicode

我试过了, iconv('ASCII//TRANSLIT', 'UTF-8', '😀');mb_convert_encoding($var, "US-ASCII", "UTF-8") 和 utf8_encode()。不工作。

谢谢

【问题讨论】:

你需要在 MySQL 中使用utf8mb4utf8 仅支持每个字符最多 3 个字节。 Here 可以看到确实是4个字节。 @Vatev :Mysql 通过将其拆分为 4 个单独的字符来绕过存储问题。我正在尝试对其进行重组。由于我的数据库非常庞大,如果没有适当的验证,我无法直接更改数据库编码。 @Vatev Mysql docs 表示表情符号在数据库中没有第4个字节 对于补充字符,utf8根本无法存储字符,而utf8mb4需要四个字节存储它。由于 utf8 根本无法存储字符,因此在 utf8 列中没有任何补充字符,从旧版本的 MySQL 升级 utf8 数据时无需担心转换字符或丢失数据。 【参考方案1】:

在不知道数据库结构的情况下(确保使用utf8 作为表的字符集!),我认为问题可能出在显示方面。尝试通过向浏览器发送一个标头来启动您的 PHP 脚本,让它知道您将显示 UTF8 字符,而不是西方编码 (ISO-8859-1)。

header('Content-type text/html; charset=UTF-8');

【讨论】:

还是一样的输入/输出?我想知道您的数据库中是否有 bum 数据——您是否查看过 this answer 并尝试将表情符号输入(和输出)数据库而不会损坏? (我尝试将表情符号存储在 MySQL 数据库中的 TEXTBLOB 中,并且两者似乎都可以正常工作没有。)

以上是关于Unicode 字符在客户端显示为编码的 ascii的主要内容,如果未能解决你的问题,请参考以下文章

Unicode与UTF8相互转化(使用MultiByteToWideChar)

关于Unicode和多字符字集。

该文件含有unicode格式的字符,当文件保存为ANSI编码的文本文件时,该字符将丢失.

Java中 中文是怎么编码显示的?

中文字符替换为其unicode编码值小3的字符

Python基础--Python3基础语法