JS无法使用unicode字符解析JSON

时间:2015-06-23 16:09:25

标签: javascript json

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

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

显示:CUR Carmen

期待:CŒUR Carmen

请帮忙。

* Note * :PHP服务器返回JSON数据,因此不应该出现任何语法错误,因为我使用了json_encode并从AJAX获取响应。它适用于à, é等其他角色,但只有这个奇怪的角色无法正常显示

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

2 个答案:

答案 0 :(得分:2)

无需转义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。所有数据都以Unicode编码,这是JSON的要求。

修改

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

答案 1 :(得分:0)

您需要逃离"并逃离\

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

应该是

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

如果第4个"只是输入错误,请转义\

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