读书人

ie6 和ie7版本带来的一个奇怪的中文乱

发布时间: 2012-09-20 09:36:50 作者: rapoo

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

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

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

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

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

解决方法:

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

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

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


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


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

?

    <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")解析传递即可。

      <%@ 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>  至   ?? ????<input name="eDate" type="text" onfocus="HS_setDate(this)" readonly>?? ????<label>  关键字:</label>?? ????<input name="key" type="text">?? ????    ?? ????<input??type="submit" value="搜索" style="color:#000;">?? ????    ?? </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"> </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> <a href="${pageUrl}&key=<%=URLEncoder.encode(request.getParameter("key"),"utf-8")%>">${pageNumber}</a> </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");

读书人网 >Web前端

热点推荐