unicode字符未正确显示

时间:2012-11-01 07:45:04

标签: html sql

目前,我将以下unicode字符串存储在数据库中。

\ u4ece \ u4e0b \ u5468 \ u4e00 \ u8d77 \ uff0c \ u5947 \ u5f02

如果我通过php发送到Apple APNS服务器,它会在iphone上正确显示。 如果我想在网站上显示这些字符(中文字符),它不会用中文显示它们,而只是显示为\ u4ece \ u4e0b \ u5468 \ u4e00 \ u8d77 \ uff0c \ u5947 \ u5f02

任何人都可以帮我解释如何正确显示它们?

1 个答案:

答案 0 :(得分:3)

那不是“Unicode”,那些是Unicode转义序列。这个:“下”是一个Unicode字符。这个:“\ u4e0b”是字符串“反斜杠你四只ee零蜜蜂” 1 如果你把那个转义序列完全一样地放到JSON中,它碰巧解决了解码JSON时的正确字符。那是因为转义序列碰巧在JSON中使用。这暗示了另一个问题,那就是你手动创建你的JSON:

$apns = "{\"message\":\"$unicodeEscape\"}";

不要那样做。使用您选择的编程语言创建一个本机数组并对其进行JSON编码:

$apns = json_encode(array('message' => '从下周一起,奇异'));

如果您目前正在执行此操作,则该字符串也会在iPhone上显示为“\ u4ece ...”,因为字符串内容将正确地进行JSON转义以保留其原始内容。

对于HTML,这些转义序列并不意味着一开始就有什么特别之处,它们肯定不代表汉字。

实际中文字符存储在以UTF-8编码的数据库中,而不是仅在某些上下文中相关的转义序列。

我建议您阅读http://kunststube.net上的大多数文章,以获取更多详细信息。


由于它们显然是JSON转义,将它们从当前格式转换回来的最简单方法应该是将它们解析为JSON:

$string = json_decode("\"$string\"");

仅当字符串不包含任何会使JSON语法无效的内容时才有效,例如"。否则,您可以调整this solution


1 (该字符串也由“Unicode字符”组成,因为这些字符中的每一个都可以用Unicode表示。)