En mi web app, puedo enviar algunos campos del formulario con jQuery $.getJSON() método. 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 son presentados con UTF-8.

Cómo puedo configurar la codificación utilizada en $.getJSON llamadas?

  • De acuerdo a la este la respuesta es ilegal para especificar el juego de caracteres para application/json.
  • ILEGAL? espero no ser arrestados por intentar…

6 Comentarios

  1. 37

    Creo que usted probablemente tendrá que usar $.ajax() si desea cambiar la codificación, consulte la contentType param abajo (la success y error devoluciones de llamada a asumir que usted 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);
        }
    });

    Yo en realidad sólo había para ello hace una hora, qué casualidad!

    • Me di cuenta de que usted primordial XMLHttpRequest, objeto host dentro de error de método. Es solo una cuestión de buenas prácticas de codificación de no confundir a otros desarrolladores 😉 yo sugeriría cambiar el nombre a algo más 😉
    • Mucho mejor 🙂 (de hecho por lo general el nombre de la misma como u ahora :>)
    • De acuerdo a la este la respuesta es ilegal para especificar el juego de caracteres para application/json.
  2. 44

    Si quieres usar $.getJSON() puede agregar la siguiente antes de la llamada :

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

    Puede utilizar el juego de caracteres que desea en lugar de utf-8.

    Las opciones se explican aquí.

    contentType : Cuando el envío de datos al servidor, el uso de este content-type. Por defecto es application/x-www-form-urlencoded, lo cual está bien para la mayoría de los casos.

    scriptCharset : Sólo para solicitudes con jsonp o script tipo de datos y el tipo. Las fuerzas de la solicitud, debe interpretarse como un cierto conjunto de caracteres. Sólo se necesita para el conjunto de caracteres de las diferencias entre el control remoto y el contenido local.

    Usted puede necesitar uno o ambos …

    • hola Pat, yo estoy teniendo el mismo problema de configuración de tipo de contenido con el método getJSON. He usado $.ajaxSetup justo antes de llamar a getJSON, pero el cambio no se produce, los «nórdicos», los personajes se convierte en basura personajes en mi DB. podría usted los pls me dicen el orden exacto de llamar mathods? thnx
    • De acuerdo a la este la respuesta es ilegal para especificar el juego de caracteres para application/json.
    • Yo tuve un problema similar con el post y estaba usando $.ajax(…) la llamada en lugar de $.post(…) porque yo no tenía una manera de cambiar el tipo de contenido. Esto me permite utilizar la abreviatura $.post notación para que coincida con el $.conseguir que estoy usando. Creo que este debería ser aceptado contestar porque funciona y permite el uso de $.getJSON().
  3. 5

    Que usted necesita para analizar las llamadas JSON usando Wireshark, para ver si se incluye el conjunto de caracteres en la formación de la página JSON o no, por ejemplo:

    • Si la página es simple, si el texto /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 .Tipo de contenido: t 
    0020 65 78 74 2f 68 74 6c 6d 0d 0a 43 61 63 68 65 2d ext/html ..Caché- 
    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 incluyendo los JSON con MIMO «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 .Caché-C ontrol: 
    0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e no-cache ..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 
    

    ¿Por qué? porque no podemos poner en la página de JSON, un objetivo como este:

    En mi caso yo uso el fabricante Conectar Me 9210 Digi:

    • Tuve que usar una bandera para indicar que el uso no estándar MIME:
      p-> theCgiPtr-> = fDataType eRpDataTypeOther;
    • Añadió el nuevo MIME en la variable:
      strcpy (p-> theCgiPtr-> fOtherMimeType, «text /html;
      charset = ISO-8859-1 «);

    Que trabajó para mí sin tener que convertir los datos que se pasan por JSON para UTF-8 y, a continuación, vuelva a realizar la conversión en la página …

  4. 1

    Uso encodeURI() en cliente JS y el uso URLDecoder.decode() en el servidor Java lado funciona.


    Ejemplo:

    • Javascript:

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

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

  5. 1

    f desea utilizar $.getJSON() puede agregar la siguiente antes de la llamada :

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

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

Dejar respuesta

Please enter your comment!
Please enter your name here