`
yhq1212
  • 浏览: 81980 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ie6 和ie7版本带来的一个奇怪的中文乱码问题(长度为奇数时最后一个字符会出现乱码)(转)

    博客分类:
  • java
 
阅读更多

ie6 和ie7版本带来的一个奇怪的中文乱码问题(长度为奇数时最后一个字符会出现乱码)(转)

    博客分类:
    JavaWeb



最近完成一个jsp开发的项目,却被中文处理的乱码问题搅得好烦,尤其是由.net转身过来的朋友,更是深有体会。

而这个问题更是中文由于ie版本的不同,所引起的特殊的奇怪问题:

表现为:ie7正常,ie6 参数就会出现中文接受信息错误。(长度为奇数时最后一个字符会出现乱码 )

原因:ie7支持UTF8编码,但是ie6支持不好。

解决方法:

1、用post发送,这个方法当然不出错了,但是,有时候必须用传参的方法,那就没则了,用第二个方法。

2、习惯把中文字符串 显示长度设置为偶数
--------------------------------------------------------

情况是:
全是汉字时,无论奇数还是偶数,都无乱码,
如果是英文中文混合,并且英文字符数是奇数时,就会出现最后有一个?号
如果是英文中文混合,并且英文字符数是偶数时,无乱码


现在的处理逻辑是,在业务方法里进行判断,如果输入的字符个数为奇数,则给其拼接上一个全角的空格,如果是半角的空格,也会有乱码问题.


我暂时试了这个办法, 居然解决问题,



form是以post方式传递的,pager-taglib中接受到得参数会以get方式传递,所以接受到得参数会是乱码,解决办法将tomcat的server.xml中的connector改为:
Xml代码 复制代码

    <Connector port="8080" maxHttpHeaderSize="8192" 
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                   enableLookups="false" redirectPort="8443" acceptCount="100" 
                   connectionTimeout="20000" disableUploadTimeout="true"  
                   URIEncoding="UTF-8"/> 

Xml代码  收藏代码

    <Connector port="8080" maxHttpHeaderSize="8192" 
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                   enableLookups="false" redirectPort="8443" acceptCount="100" 
                   connectionTimeout="20000" disableUploadTimeout="true"  
                   URIEncoding="UTF-8"/> 

通过的上面的设置,在IE6中传递偶数的中文参数不会有问题,但是传递基数的中文参数同样是乱码(此问题只有iE6有,IE7其他浏览器都不存在此问题)。问题解决办法:引入java.net.URLEncoder包,将要传递的中文字符通过URLEncoder.encode(request.getParameter("key"),"utf-8")解析传递即可。
Html代码 复制代码

    <%@ page language="java" pageEncoding="utf-8"%> 
    <%@page import="java.net.URLEncoder;"%> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 
    <%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%> 
    <%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    %> 
    <form action="lucene/search.do" method="post"> 
        <label>时间范围:</label> 
        <input name="sDate" type="text" onfocus="HS_setDate(this)" readonly>&nbsp;&nbsp;至&nbsp;&nbsp;  
        <input name="eDate" type="text" onfocus="HS_setDate(this)" readonly> 
        <label>&nbsp;&nbsp;关键字:</label> 
        <input name="key" type="text"> 
         &nbsp;&nbsp;  
        <input  type="submit" value="搜索" style="color:#000;"> 
         &nbsp;&nbsp;  
    </form> 
     
    <pg:pager url="lucene/search.do" index="half-full" items="${Pager.totalcount}" maxPageItems="${Pager.limit}" 
              export="currentPageNumber=pageNumber" scope="request"> 
              <pg:param name="totalCount" value="${Pager.totalcount}"></pg:param> 
              <pg:param name="limit" value="${Pager.limit}"></pg:param> 
              <pg:param name="sDate" value="${sDate}"/> 
              <pg:param name="eDate" value="${eDate}"/> 
                 
        <table width="100%" border="0" cellspacing="0" cellpadding="0" class="list1" id="table1"> 
            <tr> 
              <th width="40" class="num">序号</th> 
              <th width="80">&nbsp;</th> 
              <th width="266">情报标题</th> 
              <th width="292">时间</th> 
              <th width="204">来源</th> 
            </tr> 
                  <c:forEach var="info" items="${Pager.data}" varStatus="i"> 
                        <tr> 
                            <td class="num">${i.count}</td> 
                             <td class="ico"></td> 
                             <td> <a href="information/detail.do?id=${info.id}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>"target="mainFrame">${info.title}</a> 
                             </td> 
                            <td> <fmt:formatDate value="${info.createDate}" pattern="yyyy-MM-dd" /> 
                            </td> 
                            <td>${info.source}  
                            </td>  
                        </tr>  
                    </c:forEach> 
        </table> 
          
           <div class="page"> 
            <div>第 <B>${currentPageNumber}</B> / <SPAN>${Pager.totalpage}</SPAN> 页 每页<B>${Pager.limit}</B> 条 共<B>${Pager.totalcount}</B>条记录 </div> 
            <div> 
                <pg:first><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">首页</a></pg:first> 
                <pg:prev><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">上一页</a></pg:prev> 
                <pg:pages>&nbsp;<a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">${pageNumber}</a>&nbsp;</pg:pages> 
                <pg:next><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">下一页</a></pg:next>    
                <pg:last><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">尾页</a></pg:last> 
            </div> 
        </div>      
    </pg:pager> 

jsp页面这样改:
function getOutLawMessage(){
  var outLawNum = encodeURI($("#outLawNum").val());
  var outLawName = encodeURI($("#outLawName").val());
  
  var birthday = encodeURI($("#birthday").val();
  var nickName = encodeURI($("#nickName").val();
  var caseNumber = encodeURI($("#caseNumber").val();
  var caseCateUuid = encodeURI($("#caseCateUuid").val();
  document.getElementById("list_message_iframe").src="/oaw/view/department_menu/search_outlaw_message.do?outLawNum="+outLawNum+"&outLawName="+outLawName+"&birthday="+birthday+"&nickName="+nickName+"&caseNumber="+caseNumber+"&caseCateUuid="+caseCateUuid;
}


最后再接收是用
String parm = new String(request.getPremates("parematename").getBytes("ISO-8859-1"),"UTF-8");
分享到:
评论

相关推荐

    奇数个中文字符url传递乱码

    当URL中包含的中文字符数量为奇数时,最后一个未配对的中文字符无法正确地被编码,导致接收端解码失败,从而出现乱码。 #### 2.2 具体案例分析 假设一个URL中包含了一个未配对的中文字符“中”(UTF-8编码下为E4B8...

    C# sqlite 中文乱码的解决方法

    可以解决中文乱码问题,共享给大家,解决UTF-8 转换 gb2312,直接放到Bin目录中并引用

    中文乱码解决方案参考.pdf

    本文主要探讨了在使用Tomcat作为servlet容器,浏览器包括Firefox和IE6时,如何处理中文乱码问题。问题的核心在于字符编码的统一和正确转换。 首先,为了确保整个应用的字符编码一致性,通常会在以下几个方面进行...

    java文件编码GBK转utf8完美解决方案

    idea、Eclipse等项目导入.java文件中文乱码完美解决方案:文件夹下所有GBK编码的.java一键转为utf-8,操作方式:将GBK2UTF8.jar文件考到需要转码项目目录,在当前位置运行控制台,输入命令java -jar GBK2UTF8.jar,...

    中文乱码解决方案归纳.pdf

    本文主要探讨了在使用Tomcat作为servlet容器,浏览器包括Firefox3.0和IE6的情况下,如何解决中文乱码问题,以及各种请求方式(GET、POST)下可能出现的乱码情况。 首先,确保所有页面的`charset`设置为`UTF-8`是...

    字符串截取(按字节)

    如果截取操作结束于一个字符的中间(即数组索引为奇数的位置),并且该字节的值小于等于0(表明这是UTF-16中的第二个字节),则代码会去除这个字节,确保字符串完整性。 #### 总结 通过上述分析,我们可以看到,按...

    java 截取字符串(判断汉字)

    例如,在限制用户输入或展示字段长度时,如果不正确地处理中文字符,可能会导致显示不完整或格式错误等问题。 #### 方法介绍 本文将详细介绍一个用于在Java中根据字节数而非字符数截取字符串的方法——`...

    ie7打开页面有源文件但页面空白问题的解决方法

    如果在`&lt;title&gt;`标签结束前有奇数个全角字符(每个全角字符在UTF-8中占用3个字节),IE7会尝试以GB2312或GBK(两个字节编码)的方式来解析这些字符,结果可能导致半个汉字的错误解析,这半个汉字与`&lt;/title&gt;`的`字符...

    Java进制/时间/日期/字符串/流算法大全

    判断一个数字是奇数还是偶数 用Hibernate 实现分页 35 选7 彩票程序 获取GMT8 时间 中文乱码转换 Big5 字与Unicode 的互换 取得服务器当前的各种具体时间 用半角的特殊符号代替全角的特殊符号 数组和数组之间的转换...

    SQL 截取字符串应用代码

    然而,需要注意的是,`SUBSTRING`函数在处理多字节字符如中文时可能会出现问题。如果截取长度是奇数,并且包含了中文字符,可能会导致乱码。这是因为中文字符通常占用多个字节,而`SUBSTRING`默认按单字节处理,因此...

    utf-8 网页不显示+utf-8网页乱码的通用解决方法

    对于使用中文输入法输入的文本,如果直接保存而不转换为UTF-8格式,那么从数据库读取这些数据时,也会出现乱码现象。因此,正确保存文件为UTF-8格式是解决乱码的关键步骤。 在网页显示中文字符时,确保编码的一致性...

    输入一位三位数,让它们分别显示百位数和十位数和个位数

    根据给定文件的信息,我们可以分析出本篇代码的主要目的是实现对一个任意三位数进行分解,并分别显示出该数字的百位、十位与个位。接下来,我们将深入探讨这个知识点。 ### 一、程序功能概述 #### 1. 输入任意一个...

    linux介绍及系统

    - **测试版本**: 次版本号为奇数(如2.7.x),表示这是一个开发版本,主要用于测试新功能。 #### 三、课程选用版本 本课程使用的是CentOS 6.4 64位系统,这是直接应用于生产环境的最新版操作系统之一。 #### 四、...

    Python实现获取前100组勾股数的方法示例

    该公式指出,若a是大于1的奇数,那么可以表示为2n+1的形式,其中n也是一个自然数。接着,能够根据a的表达式来推导出b和c的表达式,分别是2n²+2n和2n²+2n+1。这样便可以确保这三个数满足勾股定理,形成一组勾股数。...

    怎么简单查看Win7中无线网络密码.docx

    - 这会弹出一个显示当前可用无线网络连接的菜单。 2. **选择目标无线网络**: - 在弹出的无线网络列表中,找到你想要查看密码的网络(确保是你有权访问的网络)。 - 右键点击目标网络,在弹出的菜单中选择“属性...

    java 算法

    在Java中,将字符串转换为16进制表示是一个常见的需求,尤其是在处理网络通信、加密解密等场景。 **示例代码:** ```java public static String Bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i...

Global site tag (gtag.js) - Google Analytics