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

Tha*_*ung 8 javascript json

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

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

展示 : CUR Carmen

预计 : CŒUR Carmen

请帮忙。

* 注意 * : JSON 数据由 PHP 服务器返回,因此不应该有任何语法错误,因为我使用json_encode并从 AJAX 获取响应。它适用于其他字符,例如à, é但只有这个奇怪的字符不能正确显示

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

ber*_*kyl 5

无需转义RFC 4627 中规定的 unicode 字符

2.5. 字符串

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

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

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

我认为您的服务器端实现中存在一个转码错误,您在使用json_encode. JSON 要求所有数据都以 Unicode 编码。

编辑

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


Mag*_*.fr 0

你需要转义 your"并转义\

json = '{"name":""C\u008cUR Carmen"}';
Run Code Online (Sandbox Code Playgroud)

应该

json = '{"name":"\\"C\\u008cUR Carmen"}';
Run Code Online (Sandbox Code Playgroud)

如果第四个"只是输入错误,只需转义即可\

json = '{"name":"C\\u008cUR Carmen"}';
Run Code Online (Sandbox Code Playgroud)