我试图将UTF-8字符串邮寄到我的servlet(托管在TomCat中),但是在服务器端读取的字符串不是UTF-8。我已经通过Firebug验证了ajax标头的content-type具有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/