【问题标题】:IE Ajax Problem with non-ascii characters [duplicate]非ascii字符的IE Ajax问题[重复]
【发布时间】:2011-10-03 20:53:36
【问题描述】:

我有发送和接收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 提供的字符集

$.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。

【问题讨论】:

  • 字符是怎么乱的,能不能展示一下?您是否 100% 确定 Ajax 响应是 UTF-8?
  • 字符转向:ÄÅçkıolÅÅçiÄp

标签: java jquery internet-explorer jsp character-encoding


【解决方案1】:

你也可以使用:

url=encodeURI(url);

然后把它作为一个参数:

$.ajax({type:'POST',
    url:url,.....

【讨论】:

    【解决方案2】:

    根据对问题的评论:

    字符转向:ÄÅç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");
    // ...
    

    另见:

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 1970-01-01
      • 2012-10-27
      • 2013-05-27
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 2013-02-08
      • 2013-06-16
      相关资源
      最近更新 更多