2015-06-23 96 views
1

我有以下JSON字符串{"name":""C\u008cUR Carmen"}\u008c不解析。它显示空白字符。JS无法解析JSON与Unicode字符

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

显示:CUR Carmen

期待:CŒUR Carmen

请帮助。

*注*:JSON数据是由PHP服务器返回所以不应该有任何语法错误,因为我以前json_encode,并从AJAX的响应。它的工作原理与其他人物如à, é但只有这个奇怪的字符显示不正确

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

+2

你的json字符串中还有一个额外的双引号。 – nthall

+0

请阅读我的编辑 –

+1

以我FF控制台表达'JSON.parse(“{‘姓名’:‘C \ u008cUR卡门’}”)'被正确评价,并unicode字符存在于输出,也许有一些问题与字体用于输出这个字符串。 – VitaliyG

回答

0

你需要逃避你"和逃避\

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

应该

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

如果第四"仅仅是一个打字错误,只是逃避\即:

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

我认为额外的双引号是一个错字,所以你应该把它拿出来。 – Andy

+0

@Andy刚刚更新了我的答案涵盖这两种情况下 –

+0

没有必要逃脱字符 – berkyl

2

没有必要逃避的Unicode字符在RFC 4627

2.5陈述。字符串

字符串表示与编程语言系列中使用的约定类似。一个字符串以 引号开头和结尾。除了必须转义的字符: 引号,反转斜线和控制字符(U + 0000 到U + 001F)之外,所有Unicode字符都可以放在 引号内。

您可以直接使用unicode字符串:

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

我觉得有一个在你的服务器端实现转码错误,你使用json_encode之前改变输出为ASCII。 JSON的要求是所有数据都以Unicode编码。

编辑

this fiddle有一个例子,如何恢复在JavaScript中逃脱的Unicode。

+0

而且,如果他/她不能改变JSON输出? –

+0

@ Magicprog.fr然后他必须先转码字符串。 – berkyl

+0

他*。我可以做一个'.replace',但不是一个好方法,因为我们无法知道所有可能的Unicode字符 –