Как установить кодировку в .getJSON jQuery

В своем веб-приложении я отправляю некоторые поля формы с помощью метода jQuery $.getJSON(). У меня проблемы с кодировкой. Набор символов моего приложения - charset=ISO-8859-1, но я думаю, что эти поля представлены с UTF-8.

Как я могу установить кодировку, используемую в вызовах $.getJSON?

Согласно ответу это, недопустимо указывать кодировку для application/json.

Piotr Dobrogost 27.10.2012 16:24
НЕЗАКОННО? I hope I don't get arrested for trying...
jbowman 03.06.2016 01:01
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
44
2
124 669
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Я думаю, что вам, вероятно, придется использовать $.ajax(), если вы хотите изменить кодировку, см. Параметр contentType ниже (обратные вызовы success и error предполагают, что у вас есть <div id = "success"></div> и <div id = "error"></div> в 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);
    }
});

На самом деле мне пришлось сделать это около часа назад, какое совпадение!

Я только что понял, что вы переопределяете объект хоста XMLHttpRequest внутри метода ошибки. Это просто вопрос хорошей практики кодирования, чтобы не сбивать с толку других разработчиков;) Я бы предложил переименовать его во что-нибудь другое;)

Paweł Witkowski Photography 15.04.2011 00:32

Намного лучше :) (на самом деле обычно я называю его так же, как и сейчас:>)

Paweł Witkowski Photography 22.04.2011 01:15

Согласно ответу это, недопустимо указывать кодировку для application/json.

Piotr Dobrogost 27.10.2012 16:23

Если вы хотите использовать $.getJSON(), вы можете добавить следующее перед вызовом:

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

Вы можете использовать желаемую кодировку вместо utf-8.

Опции поясняются здесь.

contentType : При отправке данных на сервер используйте этот content-type. По умолчанию используется application/x-www-form-urlencoded, что подходит для большинства случаев.

scriptCharset : Только для запросов с типом данных jsonp или script и типом GET. Заставляет интерпретировать запрос как определенную кодировку. Требуется только для различий в кодировке между удаленным и локальным контентом.

Вам может понадобиться один или оба ...

привет, Пат, у меня такая же проблема с установкой типа контента с помощью метода getJSON. Я использовал $ .ajaxSetup непосредственно перед вызовом getJSON, но никаких изменений не происходит, «нордические» символы становятся ненужными в моей БД. не могли бы вы сказать мне точный порядок вызова методов? спасибо

Bhupi 10.09.2010 13:48

Согласно ответу это, недопустимо указывать кодировку для application/json.

Piotr Dobrogost 27.10.2012 16:25

У меня была аналогичная проблема с публикацией, и я использовал вызов $ .ajax (...) вместо $ .post (...), потому что у меня не было способа изменить тип содержимого. Это позволяет мне использовать сокращенную нотацию $ .post для соответствия используемому мной $ .get. Я считаю, что это должен быть принятый ответ, потому что он работает и позволяет использовать $ .getJSON ().

eesh 02.10.2013 17:57

Используйте encodeURI() в клиентском JS и используйте URLDecoder.decode() на стороне сервера Java.


Пример:

  • Javascript:

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

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

Вам нужно проанализировать вызовы JSON с помощью Wireshark, чтобы вы увидели, включаете ли вы кодировку в формирование страницы JSON или нет, например:

  • Если страница простая, если 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
  • Если страница относится к типу, включающему пользовательский JSON с 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

Это почему? потому что мы не можем поставить на страницу JSON такую ​​цель:

В моем случае я использую производитель Connect Me 9210 Digi:

  • Мне пришлось использовать флаг, чтобы указать, что будет использоваться нестандартный MIME: p-> theCgiPtr-> = fDataType eRpDataTypeOther;
  • Он добавил новый MIME в переменную: strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html; кодировка = ISO-8859-1 ");

Это сработало для меня без необходимости преобразовывать данные, переданные JSON для UTF-8, а затем повторять преобразование на странице ...

Используйте эту функцию, чтобы восстановить символы UTF-8

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

Пример: var new_Str = decode_utf8 (строка);

Если вы хотите использовать $ .getJSON (), вы можете добавить следующее перед вызовом:

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

Простите, но чем ваш ответ отличается от 11 лет @Pat перед вашим?

Sagnalrac 26.07.2020 08:30

Другие вопросы по теме