最近完成一个jsp开发的项目,却被中文处理的乱码问题搅得好烦,尤其是由.net转身过来的朋友,更是深有体会。
而这个问题更是中文由于ie版本的不同,所引起的特殊的奇怪问题:
表现为:ie7正常,ie6 参数就会出现中文接受信息错误。(长度为奇数时最后一个字符会出现乱码 )
原因:ie7支持UTF8编码,但是ie6支持不好。
解决方法:
1、用post发送,这个方法当然不出错了,但是,有时候必须用传参的方法,那就没则了,用第二个方法。
2、习惯把中文字符串 显示长度设置为偶数
--------------------------------------------------------
情况是:
全是汉字时,无论奇数还是偶数,都无乱码,
如果是英文中文混合,并且英文字符数是奇数时,就会出现最后有一个?号
如果是英文中文混合,并且英文字符数是偶数时,无乱码
现在的处理逻辑是,在业务方法里进行判断,如果输入的字符个数为奇数,则给其拼接上一个全角的空格,如果是半角的空格,也会有乱码问题.
我暂时试了这个办法, 居然解决问题,
form是以post方式传递的,pager-taglib中接受到得参数会以get方式传递,所以接受到得参数会是乱码,解决办法将tomcat的server.xml中的connector改为:
-
<Connector port="8080" maxHttpHeaderSize="8192"
-
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
-
enableLookups="false" redirectPort="8443" acceptCount="100"
-
connectionTimeout="20000" disableUploadTimeout="true"
-
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")解析传递即可。
-
<%@ 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");
分享到:
相关推荐
解决奇数个中文字符url传递乱码问题,做了好久才找到的解决方案!
可以解决中文乱码问题,共享给大家,解决UTF-8 转换 gb2312,直接放到Bin目录中并引用
idea、Eclipse等项目导入.java文件中文乱码完美解决方案:文件夹下所有GBK编码的.java一键转为utf-8,操作方式:将GBK2UTF8.jar文件考到需要转码项目目录,在当前位置运行控制台,输入命令java -jar GBK2UTF8.jar,...
判断一个数字是奇数还是偶数 用Hibernate 实现分页 35 选7 彩票程序 获取GMT8 时间 中文乱码转换 Big5 字与Unicode 的互换 取得服务器当前的各种具体时间 用半角的特殊符号代替全角的特殊符号 数组和数组之间的转换...
JAVA时间格式化处理 ,将毫秒转化为日期, 文本的倒序输出 ,判断一个数字是奇数还是偶数 ,用Hibernate实现分页, 35选7彩票程序 ,获取GMT8时间, 中文乱码转换 ,小标签 ,Big5字与Unicode的互换, 取得服务器...
字符串截取函数,只限单字节字符使用(对于中文的截取时遇上奇数长度是会出现乱码,需另行处理),本函数可截取字符串指定范围内的字符。
Java的16进制与字符串的相互转换函数 JAVA时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 35选7彩票程序 中文乱码转换
采用jspsmartupload上传文件时,如果文件名含有中文,在服务器端取得文件名是会出现乱码。如果表单项中填写了中文,一样会有乱码问题。看了下jspsmartupload的源码,改了两个地方,现在可以没有乱码问题了。 第一...
对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如 xmodem-crc。 这是方法已经成为标准,...
经网友反映,还是有些中文会出现解码成乱码,而有些又可以,估计还是guessEncoding方法猜测编码出现了偏差,直接将guessEncoding方法写成返回UTF8就行了。 4.实现图片解码,即把条形码或二维码图片解码成其真实内容...
经网友反映,还是有些中文会出现解码成乱码,而有些又可以,估计还是guessEncoding方法猜测编码出现了偏差,直接将guessEncoding方法写成返回UTF8就行了。 4.实现图片解码,即把条形码或二维码图片解码成其真实内容...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...