Cómo establecer la encoding en .getJSON JQuery

En mi aplicación web, envío algunos campos de formulario con el método jQuery $.getJSON() . Estoy teniendo algunos problemas con la encoding. 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 encoding en llamadas $.getJSON ?

Creo que probablemente deba usar $.ajax() si desea cambiar la encoding, consulte el contentType param a continuación (las devoluciones de llamada correctas y de error suponen que tiene

y

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!

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 aquí .

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 …

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. Contenido - Tipo: 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-caché ..Contenido
 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;  caracteres 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 objective 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 …

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);