Tengo una configuration estándar cliente / server de tipo HTML5. El lado del server es todo Java, y el lado del cliente es JavaScript. Usando ajax envío consultas y recibo respuestas. Hasta ahora, no he tenido problemas con JSON.parse(data)
. Sin embargo, tengo un nuevo usuario que ingresó su apellido con caracteres chinos. Esto está provocando un error "JSON.parse: carácter de control incorrecto en el literal de cadena" en el lado del cliente.
El server genera una respuesta de la siguiente manera (se omite el event handling excepciones):
JSONObject jsono = new JSONObject(); jsono.put("last_name", last_name); jsono.put("first-name", first_name); String response = jsono.toString();
El cliente recibe algo como:
{"last_name":"Smith","first_name":"Bob"}
La respuesta se muestra en una página web que está configurada en <meta charset="utf-8">
:
var theResult = JSON.parse(data); $('#first_name').html(theResult.first_name);
Esto funciona bien. Sin embargo, para el usuario chino, el cliente recibe
{"last_name":"唐","first_name":"Bob"}
y esto causa el error json.parse.
Ahora comencé a search otros personajes. Por ejemplo, Andrés
no causa un error, pero tampoco se visualiza correctamente. Se parece a Andr s
.
Entonces, claramente me falta algo. ¿Podría alguien aclararme dónde radica el problema (por ejemplo, ¿es del lado del server? ¿Del lado del cliente? JavaScript? Jquery? Html?) Y cómo resolverlo?
Las bibliotecas más útiles en Java que he usado son Gson API
y JSONObject, y ambas pueden manejar este problema; luego, si lo haces, tu problema probablemente se resuelva. Solo tenga cuidado con todos los params relacionados con utf-8 que aquí son realmente importantes:
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);