DOJO xhrGet JSON со специальным символом - PullRequest
0 голосов
/ 05 апреля 2011

Я использую dojo и стойки 1.3.8, и я хочу передать некоторые «специальные» символы, такие как è, °, ù, €, через dojo.xhrGet в стойки действий saveBill.Но когда я печатаю json в действии, которое оно мне дало

è la prova n°10

Я не знаю, в чем проблема, я установил для всех типов содержимого значение utf-8 во всех jsp ...также фильтр Struts для кодирования в UTF-8 ... ничего ... где я не так?Это код JavaScript

var billJson = {"row":"0","descr":"è la prova n°10"};
dojo.xhrGet({
    url: "saveBill.do",
    headers: {'bill': billJson, 'Content-Type': 'application/json; charset=UTF-8'},
    handleAs: "text",
    load: function(response, ioArgs) {
            showMessage(response);
    },
    error: function(message, ioArgs) {
            showMessage(message);
    }
});

и заголовок ответа (скопируйте и вставьте из Firebug)

Host    localhost:9080
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8
Accept-Language it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset  UTF-8,*
Keep-Alive  115
Connection  keep-alive
bill    {"row":"0","descr":"è la prova n°10"}
Content-Type    application/json; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://localhost:9080/CA3_S_001/login.do
Cookie  invoiceTreeSaveStateCookie=undefined%2C000001%2C000014; JSESSIONID=0000QeyArD4K7CDr_oyNkrpw9Zk:-1

Спасибо !!!

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Отправка JSON в заголовке HTTP довольно нестандартна, и я бы не рекомендовал это. Одна из причин не отправлять JSON в заголовке заключается в том, что, как вы узнали, заголовки HTTP - это просто байты; у них нет встроенной кодовой страницы для перевода их в строки. Я бы вместо этого отправил данные JSON в теле POST; Я думаю, вам повезет намного больше.

Однако, если вам абсолютно необходимо отправлять данные не-ASCII JSON в заголовке, вы можете попробовать вызвать ServletRequest.setCharacterEncoding ("UTF-8"). Я думаю, что это влияет только на разбор параметров URL и тел POST, но стоит попробовать. Вы также можете, как предлагает Робот Вудс, \ uXXXX кодировать все не-ASCII-символы в JSON (где XXXX - шестнадцатеричное представление кодировки символа UTF-16).

А если серьезно, просто поместите его в тело POST; это более сильное, лучшее решение.

0 голосов
/ 05 апреля 2011

вам нужно уникод экранировать эти символы: так что вместо è у вас будет \\ u00E8

вот ресурс: http://www.fileformat.info/info/unicode/category/Ll/list.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...