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

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

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

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

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

解决方法:

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

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

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


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


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

 

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

Xml代码 复制代码
  1. <Connector port="8080" maxHttpHeaderSize="8192"  
  2.                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
  3.                enableLookups="false" redirectPort="8443" acceptCount="100"  
  4.                connectionTimeout="20000" disableUploadTimeout="true"   
  5.                URIEncoding="UTF-8"/>  
<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代码 复制代码
  1. <%@ page language="java" pageEncoding="utf-8"%>  
  2. <%@page import="java.net.URLEncoder;"%>  
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>  
  5. <%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>  
  6. <%   
  7. String path = request.getContextPath();   
  8. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
  9. %>  
  10. <form action="lucene/search.do" method="post">  
  11.     <label>时间范围:</label>  
  12.     <input name="sDate" type="text" onfocus="HS_setDate(this)" readonly>&nbsp;&nbsp;至&nbsp;&nbsp;   
  13.     <input name="eDate" type="text" onfocus="HS_setDate(this)" readonly>  
  14.     <label>&nbsp;&nbsp;关键字:</label>  
  15.     <input name="key" type="text">  
  16.      &nbsp;&nbsp;   
  17.     <input  type="submit" value="搜索" style="color:#000;">  
  18.      &nbsp;&nbsp;   
  19. </form>  
  20.   
  21. <pg:pager url="lucene/search.do" index="half-full" items="${Pager.totalcount}" maxPageItems="${Pager.limit}"  
  22.           export="currentPageNumber=pageNumber" scope="request">  
  23.           <pg:param name="totalCount" value="${Pager.totalcount}"></pg:param>  
  24.           <pg:param name="limit" value="${Pager.limit}"></pg:param>  
  25.           <pg:param name="sDate" value="${sDate}"/>  
  26.           <pg:param name="eDate" value="${eDate}"/>  
  27.               
  28.     <table width="100%" border="0" cellspacing="0" cellpadding="0" class="list1" id="table1">  
  29.         <tr>  
  30.           <th width="40" class="num">序号</th>  
  31.           <th width="80">&nbsp;</th>  
  32.           <th width="266">情报标题</th>  
  33.           <th width="292">时间</th>  
  34.           <th width="204">来源</th>  
  35.         </tr>  
  36.               <c:forEach var="info" items="${Pager.data}" varStatus="i">  
  37.                     <tr>  
  38.                         <td class="num">${i.count}</td>  
  39.                          <td class="ico"></td>  
  40.                          <td> <a href="information/detail.do?id=${info.id}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>"target="mainFrame">${info.title}</a>  
  41.                          </td>  
  42.                         <td> <fmt:formatDate value="${info.createDate}" pattern="yyyy-MM-dd" />  
  43.                         </td>  
  44.                         <td>${info.source}   
  45.                         </td>   
  46.                     </tr>   
  47.                 </c:forEach>  
  48.     </table>  
  49.        
  50.        <div class="page">  
  51.         <div><B>${currentPageNumber}</B> / <SPAN>${Pager.totalpage}</SPAN> 页 每页<B>${Pager.limit}</B> 条 共<B>${Pager.totalcount}</B>条记录 </div>  
  52.         <div>  
  53.             <pg:first><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">首页</a></pg:first>  
  54.             <pg:prev><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">上一页</a></pg:prev>  
  55.             <pg:pages>&nbsp;<a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">${pageNumber}</a>&nbsp;</pg:pages>  
  56.             <pg:next><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">下一页</a></pg:next>     
  57.             <pg:last><a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">尾页</a></pg:last>  
  58.         </div>  
  59.     </div>       
  60. </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");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值