我正在尝试将 UTF-8 字符串发布到我的 servlet(托管在 TomCat 中),但在服务器端读取的字符串不是 UTF-8。我已经通过 Firebug 验证了 ajax header 的内容类型具有 utf-8 编码集。我正在向服务器发送“MÉXICO”,但我收到的是“MÉXICO”。
$.ajaxSetup({
scriptCharset: "utf-8" ,
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
});
$.ajax({
url: "SetData",
type: 'POST',
data: 'MÉXICO',
success: function(){
console.log('Data set');
}
});
这是servlet中的java代码
request.setCharacterEncoding("UTF-8");
BufferedReader reader = new BufferedReader( new InputStreamReader( request, "UTF-8" ) );
char[] chr = new char[5];
reader.read( chr );
builder.append( chr );
更新 1
我将 js 中的发布数据更改为 encodeURIComponent('MÉXICO') 但服务器仍然读取“MÉXICO”。
但是,如果我得到 encodeURIComponent('MÉXICO') 的字符串值,即 'M%C3%89XICO',它就可以工作了! 我晕了!知道为什么这会起作用吗?
$.ajax({
url: "SetData",
type: 'POST',
//data: 'MÉXICO', ** does not work
//data: encodeURIComponent('MÉXICO'), ** does not work
data: 'M%C3%89XICO', //works !!!!
success: function(){
console.log('Data set');
}
})
;
最佳答案
我不明白你在做什么,你发送什么样的请求参数。代码不应该是这样的:
...
data:{key:'MÉXICO'},
...
或
...
data:{key:encodeURIComponent('MÉXICO')},
...
在 servlet 中
...
request.getParameter('key')
...
或
stringURLDecoder.decode(
request.getParameter('key').toString(),
'UTF-8'
);
或者我什么都不懂(如果是这种情况,抱歉:/)
关于java - 使用 jquery 将 UTF-8 字符串发布到 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608374/