Java 具有非ascii字符的IE Ajax问题
我知道发送和接收jsp页面都是用UTF-8 jquery编码的。post调用可以工作,IE除外。页面输入应该是土耳其语。土耳其特殊人物şığğğğ弄糟了Java 具有非ascii字符的IE Ajax问题,java,jquery,internet-explorer,jsp,character-encoding,Java,Jquery,Internet Explorer,Jsp,Character Encoding,我知道发送和接收jsp页面都是用UTF-8 jquery编码的。post调用可以工作,IE除外。页面输入应该是土耳其语。土耳其特殊人物şığğğğ弄糟了 $.post('/answer.jsp', {cmd:'doSomething',nickname:nickNameUser}, function(data){ if(data!=null && data.success){ window.location.href="
$.post('/answer.jsp', {cmd:'doSomething',nickname:nickNameUser},
function(data){
if(data!=null && data.success){
window.location.href="/main.htm";
}
else{
$('#formError').text(data.error);
}
},
'json');
我试过但失败了
1-)我将接收到的jsp文件转换为ISO-8859-9,并将post转换为ajax提供的字符集
$.ajax({type:'POST',
url:'/answer.jsp',
data:{cmd:'doSomething', nickname:NickNameUser},
dataType:'json',
contentType: 'application/json; charset=ISO-8859-9',
cache: false,
success:function(data){
if(data!=null && data.success){
window.location.href="/main.htm";
}
else{
$('#formError').text(data.error);
}
}
});
2-)我在Java端尝试了以下内容
nickname = new String(nickname.getBytes("utf-8"), "iso-8859-9");
他们都没有工作。你知道有什么解决办法吗?。
顺便说一句,我讨厌IE。根据对这个问题的评论: 字符变为:
kÄñolÅÃçiÄp
这就是使用UTF-8将字符序列解码为字节,然后使用ISO-8859-1(或ISO-8859-9)将这些字节编码为字符时得到的结果
MSIE以外的现代浏览器足够智能,可以在返回初始HTML的页面响应的HTTPContent-Type
标题中未指定字符集时检测响应编码。因此,它在MSIE上失败只能意味着在HTTP内容类型
头中没有指定正确的字符集
将以下行添加到呈现HTML代码的JSP页面顶部应该可以解决此问题:
<%@ page pageEncoding="UTF-8" %>
也许您已经使用了正确的方法,但是还应该考虑到您正在使用相同的字符集解析POST请求参数。在您(ab)用作JSON服务的
answer.jsp
中,您应该确保在访问任何请求参数之前调用以下行:
request.setCharacterEncoding("UTF-8");
String nickname = request.getParameter("nickname");
// ...
另见:
url=encodeURI(url);
然后将其作为参数:
$.ajax({type:'POST',
url:url,.....
你能告诉我角色是怎么搞砸的吗?您100%确定Ajax响应是UTF-8吗?字符转向:Ä䵉§kıol䵉䵉§iÄp