为什么JSON中的中文字符会导致JSON.parse出现“控制不良”错误?

时间:2013-12-28 17:25:55

标签: java javascript json jquery utf-8

我有一个标准的HTML5型客户端/服务器设置。服务器端都是Java,客户端是JavaScript。使用ajax我发送查询并接收回复。到目前为止,我对JSON.parse(data)没有任何问题。但是,我有一个新用户使用中文字符输入她的姓氏。这导致客户端的“JSON.parse:字符串文字中的错误控制字符”错误。

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

JSONObject jsono = new JSONObject();
jsono.put("last_name", last_name);
jsono.put("first-name", first_name);
String response = jsono.toString();

客户收到的内容如下:

{"last_name":"Smith","first_name":"Bob"}

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

var theResult = JSON.parse(data);
$('#first_name').html(theResult.first_name);

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

{"last_name":"唐","first_name":"Bob"}

这会导致json.parse错误。

我现在开始关注其他角色了。例如,Andrés不会导致错误,但也无法正常显示。它看起来像Andr�s

所以,我显然遗漏了一些东西。有人可以告诉我问题所在(例如,它是服务器端吗?客户端?JavaScript?jquery?html?)以及如何解决它?

1 个答案:

答案 0 :(得分:1)

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

JSONObject jsono = new JSONObject();
jsono.put("last_name", "唐");
jsono.put("first-name", firstName);
String myjsonString = jsono.toString();

//write your output
DataOutputStream out = new DataOutputStream(new FileOutputStream("myjson.txt"));
out.write(myjsonString.getBytes("utf-8"),0, myjsonString.getBytes("UTF-8").length);