JS无法解析带有unicode字符的JSON

JS cannot parse JSON with unicode character

本文关键字:unicode 字符 JSON JS      更新时间:2023-09-26

我有以下JSON字符串{"name":""C'u008cUR Carmen"},但'u008c未解析。它显示的是空字符。

json = '{"name":"C'u008cUR Carmen"}';
json = JSON && JSON.parse(json) || $.parseJSON(json);

显示:CUR Carmen

预期:CŒUR Carmen

请帮忙。

*注意*:JSON数据由PHP服务器返回,因此不应该有任何语法错误,因为我使用了json_encode并从AJAX获得了响应。它可以与à, é等其他字符一起使用,但只有这个wierd字符不能正确显示

编辑已解决!这不是JS问题,而是MySQL返回的字符集问题。您可以在返回SQL数据之前使用mysql_set_charset('utf8')。按预期显示'u0152

没有必要转义RFC 4627 中规定的unicode字符

2.5.字符串

字符串的表示方式类似于C语言中使用的约定编程语言家族。字符串以引号。所有Unicode字符都可以放在引号,但必须转义的字符除外:引号、反向实线和控制字符(U+0000通过U+001F)。

你可以直接使用你的unicode字符串:

json = '{"name":"CŒUR Carmen"}';
json = JSON && JSON.parse(json) || $.parseJSON(json);

我认为在您的服务器端实现中存在一个代码转换错误,即在使用json_encode之前将输出更改为ASCII。JSON要求所有数据都以Unicode编码。

编辑

在这个fiddle中,有一个如何在javascript中恢复转义的unicode的示例。

您需要逃离"并逃离':

json = '{"name":""C'u008cUR Carmen"}';

应该是

json = '{"name":"''"C''u008cUR Carmen"}';

如果第4个"只是一个键入错误,只需退出'即可:

json = '{"name":"C''u008cUR Carmen"}';