目前,我将以下unicode字符串存储在数据库中。
\ u4ece \ u4e0b \ u5468 \ u4e00 \ u8d77 \ uff0c \ u5947 \ u5f02
如果我通过php发送到Apple APNS服务器,它会在iphone上正确显示。 如果我想在网站上显示这些字符(中文字符),它不会用中文显示它们,而只是显示为\ u4ece \ u4e0b \ u5468 \ u4e00 \ u8d77 \ uff0c \ u5947 \ u5f02
任何人都可以帮我解释如何正确显示它们?
答案 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表示。)