Como definir a codificação em .getJSON JQuery

votos
39

Em meu aplicativo web, eu enviar alguns campos de formulário com jQuery $.getJSON()Método. Eu estou tendo alguns problemas com a codificação. O personagem-set do meu aplicativo é charset=ISO-8859-1, mas eu acho que esses campos são submetidos com UTF-8.

Alguém sabe como posso definir a codificação em $.getJSONchamadas?

Publicado 25/08/2008 em 19:45
fonte usuário
Em outras línguas...                            


5 respostas

votos
43

Se você quer usar $.getJSON()você pode adicionar o seguinte antes da chamada:

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

Você pode usar o charset que você quer em vez de utf-8.

As opções são explicadas aqui .

contentType :Ao enviar dados para o servidor, use este content-type. O padrão é application/x-www-form-urlencoded, o que é bom para a maioria dos casos.

scriptCharset :Somente para pedidos com jsonpou scriptdataType e tipo GET. Força a solicitação deve ser interpretada como um determinado charset. Só é necessário para diferenças charset entre o conteúdo remoto e local.

Você pode precisar de um ou de ambos ...

Respondeu 25/08/2008 em 23:12
fonte usuário

votos
33

Eu acho que você provavelmente terá que usar $.ajax()se você quiser alterar a codificação, consulte o contentTypeparam abaixo (o successe errorcallbacks supor que você tem <div id="success"></div>e <div id="error"></div>no 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);
    }
});

Na verdade, eu só tinha que fazer isso cerca de uma hora atrás, que coincidência!

Respondeu 25/08/2008 em 20:23
fonte usuário

votos
4

Você precisa analisar o JSON chamadas usando Wireshark, assim que você vai ver se você incluir o charset na formação da página JSON ou não, por exemplo:

  • Se a página é simples se text / html
0000 48 54 54 50 2-F 31 2e 31 20 32 30 30 20 4f 4b HTTP 0d / 1.1 200 OK.
0010 0a 43 6e 6f 74 65 74 2d 6e 54 79 70 65 20 74 3a .content -tipo: t
0020 65 78 74 2-F 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext / html ..Cache-
0030 43 6e 6f 6f 74 72 6c 3a 20 6e 6f 2d 63 61 63 68 Controlo: não-cach
  • Se a página é do tipo incluindo JSON personalizado com MIME "charset = ISO-8859-1"
0000 48 54 54 50 2-F 31 2e 31 20 32 30 30 20 4f 4b HTTP 0d / 1.1 200 OK.
0010 0a 43 61 63 68 65 2d 43 6e 6f 6f 74 72 6c 3a 20 .cache-C ontrolo: 
0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6e 6f 74 65 6e não-cache ..Conten
0030 74 2d 54 79 70 65 3A 20 74 65 78 74 2-F 68 74 6d t-Type: text / htm
0040 6c 3b 63 68 61 20 72 73 65 74 49 53 4f 3d 2d 38 l; caracteres et = ISO-8
0050 38 35 39 31 2d 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..C onnectio

Por que é que? porque não podemos colocar na página do JSON um objetivo como este:

No meu caso eu uso o fabricante Conectar-me 9210 Digi:

  • Eu tive que usar uma bandeira para indicar que um usaria MIME não-padrão: p> theCgiPtr-> = fDataType eRpDataTypeOther;
  • Acrescentou o novo MIME na variável: strcpy (p> theCgiPtr-> fOtherMimeType, "text / html; charset = ISO-8859-1");

Ela trabalhou para mim sem ter de converter os dados passados por JSON para UTF-8 e, em seguida, refazer a conversão na página ...

Respondeu 07/03/2012 em 18:22
fonte usuário

votos
1

Use encodeURI()no cliente JS e usar URLDecoder.decode()em trabalhos lado do servidor Java.


Exemplo:

  • Javascript :

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

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

Respondeu 03/01/2012 em 03:52
fonte usuário

votos
0

Use esta função para recuperar os caracteres utf-8

function decode_utf8(s) { 

  return decodeURIComponent(escape(s)); 

}

exemplo:

var new_Str=decode_utf8(str);
Respondeu 12/11/2014 em 12:43
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more