为什么 JSON 中的汉字会导致 JSON.parse 出现“bad control character”错误?

RPW*_*RPW 5 javascript java jquery json utf-8

我有一个标准的 HTML5 类型的客户端/服务器设置。服务器端全是Java,客户端是JavaScript。使用 ajax 我发送查询并接收回复。到目前为止,我没有遇到任何问题JSON.parse(data)。但是,我有一个新用户使用汉字输入了她的姓氏。这会导致客户端出现“JSON.parse: bad control character in string literal”错误。

服务器按如下方式构建回复(省略异常处理):

JSONObject jsono = new JSONObject();
jsono.put("last_name", last_name);
jsono.put("first-name", first_name);
String response = jsono.toString();
Run Code Online (Sandbox Code Playgroud)

客户端收到类似的东西:

{"last_name":"Smith","first_name":"Bob"}
Run Code Online (Sandbox Code Playgroud)

回复显示在设置为的网页上 <meta charset="utf-8">

var theResult = JSON.parse(data);
$('#first_name').html(theResult.first_name);
Run Code Online (Sandbox Code Playgroud)

这工作得很好。但是,对于中国用户,客户端收到

{"last_name":"?","first_name":"Bob"}
Run Code Online (Sandbox Code Playgroud)

这会导致 json.parse 错误。

我现在开始研究其他角色。比如Andrés不会引起错误,也不会正常显示。看起来像Andr?s

所以,我显然错过了一些东西。有人能告诉我问题出在哪里(例如,它是服务器端?客户端?JavaScript?jquery?html?)以及如何解决它?

Meh*_*ami 1

我使用过的 Java 中最有用的库是Gson APIJSONObject 它们都可以处理这个问题,那么如果你这样做,你的问题可能就解决了。请注意,这里所有与 utf-8 相关的参数都非常重要:

\n\n
JSONObject jsono = new JSONObject();\njsono.put("last_name", "\xe5\x94\x90");\njsono.put("first-name", firstName);\nString myjsonString = jsono.toString();\n\n//write your output\nDataOutputStream out = new DataOutputStream(new FileOutputStream("myjson.txt"));\nout.write(myjsonString.getBytes("utf-8"),0, myjsonString.getBytes("UTF-8").length);\n
Run Code Online (Sandbox Code Playgroud)\n