我有发送和接收jsp页面都是用UTF8编码的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提供的字符集
$.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。
发布于 2011-09-17 01:29:59
您还可以使用:
url=encodeURI(url);
然后把它作为一个参数:
$.ajax({type:'POST',
url:url,.....
发布于 2011-07-13 04:22:01
根据对问题的评论:
字符转换为:
ÄÅçkıolÅÅçiÄp
这就是使用UTF-8将字符序列ğşçkıolşşçiğp
解码为字节,然后使用ISO-8859-1 (或ISO-8859-9)将这些字节编码为字符时得到的结果。
当返回初始Content-Type
的页面的响应的HTTPHTML头中没有指定字符集时,除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");
// ...
另请参阅:
https://stackoverflow.com/questions/6668786
复制相似问题