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

3
我试图使用其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(),但都不起作用。
谢谢!

1
您需要在MySQL中使用utf8mb4utf8仅支持每个字符最多3个字节。 - Vatev
在这里,您可以看到它确实是4个字节。 - OIS
@Vatev:Mysql通过将其分成4个单独的字符来绕过存储问题。我正在尝试重新构建它。由于我的数据库非常庞大,因此我不能直接更改数据库编码而没有适当的验证。 - Abhijith A C
@Vatev Mysql文档指出,在数据库中,表情符号没有第四个字节 对于补充字符,utf8根本无法存储该字符,而utf8mb4需要四个字节来存储它。由于utf8根本无法存储该字符,因此您在utf8列中没有任何补充字符,并且在升级utf8数据时不必担心转换字符或丢失数据。 - OIS
1个回答

0

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

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

输入/输出还是一样的吗?我想知道你的数据库中是否有错误数据——你看过这个答案并尝试使用它来在数据库中获取和存储表情符号而不会出现损坏吗?(我尝试将表情符号存储在MySQL数据库中的TEXTBLOB中,两者似乎都可以正常工作,而不需要那个方法。) - Seth Battis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接