admin管理员组文章数量:1429775
I have a standard HTML5-type client/server set up. The server side is all Java, and the client side is JavaScript. Using ajax I send queries and receive replies. Up to now, I've had no problems with JSON.parse(data)
. However, I have a new user who entered her last name using Chinese characters. This is causing a "JSON.parse: bad control character in string literal" error on the client side.
The server builds a reply as follows (exception handling omitted):
JSONObject jsono = new JSONObject();
jsono.put("last_name", last_name);
jsono.put("first-name", first_name);
String response = jsono.toString();
The client receives something like:
{"last_name":"Smith","first_name":"Bob"}
The reply is displayed on a web page which is set to <meta charset="utf-8">
:
var theResult = JSON.parse(data);
$('#first_name').html(theResult.first_name);
This works just fine. However, for the Chinese user, the client receives
{"last_name":"唐","first_name":"Bob"}
and this causes the json.parse error.
I've now started looking at other characters. For example, Andrés
does not cause an error, but also does not display properly. It looks like Andr�s
.
So, I'm clearly missing something. Could someone enlighten me where the problem lies (e.g., is it server side? client side? JavaScript? jquery? html?) and how to solve it?
I have a standard HTML5-type client/server set up. The server side is all Java, and the client side is JavaScript. Using ajax I send queries and receive replies. Up to now, I've had no problems with JSON.parse(data)
. However, I have a new user who entered her last name using Chinese characters. This is causing a "JSON.parse: bad control character in string literal" error on the client side.
The server builds a reply as follows (exception handling omitted):
JSONObject jsono = new JSONObject();
jsono.put("last_name", last_name);
jsono.put("first-name", first_name);
String response = jsono.toString();
The client receives something like:
{"last_name":"Smith","first_name":"Bob"}
The reply is displayed on a web page which is set to <meta charset="utf-8">
:
var theResult = JSON.parse(data);
$('#first_name').html(theResult.first_name);
This works just fine. However, for the Chinese user, the client receives
{"last_name":"唐","first_name":"Bob"}
and this causes the json.parse error.
I've now started looking at other characters. For example, Andrés
does not cause an error, but also does not display properly. It looks like Andr�s
.
So, I'm clearly missing something. Could someone enlighten me where the problem lies (e.g., is it server side? client side? JavaScript? jquery? html?) and how to solve it?
Share Improve this question edited Dec 28, 2013 at 17:44 RPW asked Dec 28, 2013 at 17:25 RPWRPW 3352 gold badges5 silver badges16 bronze badges 7-
actually it is not a JavaScript problem, I think you use Java on the server-side, and it is related to your
JSONObject API
not client-side, if you really use Java add the tag then wait for my answer. – Mehran Hatami Commented Dec 28, 2013 at 17:31 - As Mehran said, it's not JSON or JavaScript. It's almost certainly an encoding problem. If the encoding is correct and everything knows what that encoding is, that works. (Example: jsbin./eParenUK/1/edit). So for example, if your JSON is returned to the browser using the Windows-1252 charset (or UTF-16, or...) instead of UTF-8... – T.J. Crowder Commented Dec 28, 2013 at 17:33
- I added the [java] tag. The server side is all Java. The production version runs on Linux; my development version runs on Mac. – RPW Commented Dec 28, 2013 at 17:45
-
How are you writing the
response
for the client? – Pavel Horal Commented Dec 28, 2013 at 18:29 -
I first write the header info (
HTTP/1.0 200 OK Connection: close Server: ServerName Content-Type: text/html
) and thentry {output.writeBytes(response);
Now that you mention it, I suspecttext/html
is relevant. – RPW Commented Dec 28, 2013 at 18:50
1 Answer
Reset to default 1The most useful libraries in Java I have used are Gson API
and JSONObject and both can handle this issue, then if you this your problem is probably solved. just be careful all the utf-8 related params here are really important:
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);
本文标签:
版权声明:本文标题:java - Why do Chinese characters in JSON cause "bad control character" error with JSON.parse? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745445813a2658658.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论