我有一个标准的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?)以及如何解决它?
答案 0 :(得分:1)
我使用的Java中最有用的库是Gson API
和JSONObject,两者都可以处理这个问题,如果你这样,你的问题可能已经解决了。请注意这里所有与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);