我有发送和接收jsp页面都是用UTF-8编码的jquery.post调用工作除了IE。页面输入预计为土耳其语。土耳其特殊字符çşığü搞砸了。
$.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提供的charset
$.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。
答案 0 :(得分:2)
您也可以使用:
url=encodeURI(url);
然后把它作为一个参数:
$.ajax({type:'POST',
url:url,.....
答案 1 :(得分:1)
根据对该问题的评论:
字符转向:
ÄÅçkıolÅÅçiÄp
当您使用UTF-8将字符序列ğşçkıolşşçiğp
解码为字节,然后使用ISO-8859-1(或ISO-8859-9)将这些字节编码为字符时,就会得到这些。
除了在返回初始HTML的页面的响应的HTTP Content-Type
标头中未指定字符集时,MSIE以外的现代浏览器足够智能地检测响应编码。因此,它在MSIE上失败只能意味着在HTTP Content-Type
标头中没有指定正确的字符集。
将以下行添加到呈现HTML代码的JSP页面的顶部应修复它:
<%@ page pageEncoding="UTF-8" %>
它会将响应编码和内容类型标题字符集设置为指定的字符集。
您还可以将以下条目添加到您的webapp的/WEB-INF/web.xml
文件中,以使其在您的webapp的每个JSP页面上生效:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
也许您已经以正确的方式执行此操作,但您还应考虑到您使用相同的字符集解析POST请求参数。在您(ab)用作JSON服务的answer.jsp
中,您应确保在访问任何请求参数之前调用以下行:
request.setCharacterEncoding("UTF-8");
String nickname = request.getParameter("nickname");
// ...