IE Ajax非ascii字符的问题

时间:2011-07-12 17:56:28

标签: 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="/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。

2 个答案:

答案 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");
// ...

另见: