DOJO xhrGet json带有特殊字符

DOJO xhrGet json with special character

本文关键字:特殊字符 json xhrGet DOJO      更新时间:2023-09-26

我使用dojo和struts 1.3.8,我想通过dojo传递一些"特殊"字符,如è,°,ù,€。得到一个动作struts 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);
    }
});

这是响应头(copy&paste from 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

谢谢! !

需要对这些字符进行unicode转义:所以不是è,而是''u00E8

这里有一个资源:http://www.fileformat.info/info/unicode/category/Ll/list.htm

在HTTP头中发送JSON是相当不标准的,我不建议这样做。不要在报头中发送JSON的一个原因是,正如你所发现的,HTTP报头只是字节;它们没有内在的代码页来将它们转换为字符串。相反,我将发送JSON数据在一个POST体;我觉得你的运气会好得多。

然而,如果你绝对必须在报头中发送非ascii JSON数据,你可以尝试调用ServletRequest.setCharacterEncoding("UTF-8")。我认为它只影响URL参数和POST主体的解析,但值得一试。您还可以,正如Robot Woods建议的那样,'uXXXX编码JSON中的所有非ascii字符(其中XXXX是字符的UTF-16编码的十六进制表示)。

但是说真的,把它放在POST主体中;这是一个更强大、更好的解决方案。