leer from example error jquery ajax json character-encoding

from - jquery getjson post



Cómo establecer la codificación en.getJSON JQuery (5)

En mi aplicación web, envío algunos campos de formulario con el método jQuery $.getJSON() . Estoy teniendo algunos problemas con la codificación. El conjunto de caracteres de mi aplicación es charset=ISO-8859-1 pero creo que estos campos se envían con UTF-8 .

¿Alguien sabe cómo puedo configurar la codificación en llamadas $.getJSON ?


Creo que probablemente deba usar $.ajax() si desea cambiar la codificación, consulte el contentType param a continuación (las devoluciones de llamada correctas y de error suponen que tiene <div id="success"></div> y <div id="error"></div> en el html):

$.ajax({ type: "POST", url: "SomePage.aspx/GetSomeObjects", contentType: "application/json; charset=utf-8", dataType: "json", data: "{id: ''" + someId + "''}", success: function(json) { $("#success").html("json.length=" + json.length); itemAddCallback(json); }, error: function (xhr, textStatus, errorThrown) { $("#error").html(xhr.responseText); } });

De hecho, tuve que hacer esto hace una hora, ¡qué casualidad!


Debe analizar las llamadas JSON utilizando Wireshark, por lo que verá si incluye el juego de caracteres en la formación de la página JSON o no, por ejemplo:

  • Si la página es simple si text / html

0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 .Content -Type: t 0020 65 78 74 2f 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext/html ..Cache- 0030 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 Control: no-cach

  • Si la página es del tipo que incluye JSON personalizado con MIME "charset = ISO-8859-1"

0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 .Cache-C ontrol: 0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e no-cache ..Conten 0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d t-Type: text/htm 0040 6c 3b 20 63 68 61 72 73 65 74 3d 49 53 4f 2d 38 l; chars et=ISO-8 0050 38 35 39 2d 31 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..C onnectio

¿Porqué es eso? porque no podemos poner en la página de JSON un objetivo como este:

En mi caso uso el fabricante Connect Me 9210 Digi:

  • Tuve que usar una bandera para indicar que se usaría un MIME no estándar: p-> theCgiPtr-> = fDataType eRpDataTypeOther;
  • Agregó el nuevo MIME en la variable: strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html; charset = ISO-8859-1");

Funcionó para mí sin tener que convertir los datos pasados ​​por JSON para UTF-8 y luego rehacer la conversión en la página ...


Si desea usar $.getJSON() , puede agregar lo siguiente antes de la llamada:

$.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/json; charset=utf-8" });

Puede usar el conjunto de caracteres que desee en lugar de utf-8 .

Las opciones se explican here .

contentType : cuando envíe datos al servidor, use este content-type . El valor predeterminado es application/x-www-form-urlencoded , que está bien para la mayoría de los casos.

scriptCharset : solo para solicitudes con jsonp o script dataType y GET type. Obliga a la solicitud a interpretarse como un cierto conjunto de caracteres. Solo es necesario para las diferencias de caracteres entre el contenido remoto y el local.

Puede necesitar uno o ambos ...


Utilice encodeURI() en el cliente JS y use URLDecoder.decode() en el servidor Java side works.

Ejemplo:

  • Javascript :

    $.getJSON( url, { "user": encodeURI(JSON.stringify(user)) }, onSuccess );

  • Java :

    java.net.URLDecoder.decode(params.user, "UTF-8");


Utilice esta función para recuperar los caracteres utf-8

function decode_utf8(s) { return decodeURIComponent(escape(s)); }

ejemplo:

var new_Str=decode_utf8(str);