今天在程序版本更新之后,发现了一个bug,页面查询的时候,提交到后台的中文是乱码。之前用form表单提交,是没有问题的, 后来因为项目需要,只能刷新查询后的显示结果,所以就放在一个iframe里面。 这样一来,就只能用参数来提交了。
多方寻找资料,加之实践,终于找到了解决方案
首先,在提交的时候,先用javascript 把中文给转换成UTF-8的编码, 函数如下
function EncodeUtf8(s1)
{
var s = escape(s1);
var sa = s.split("%");
var retV ="";
if(sa[0] != "")
{
retV = sa[0];
}
for(var i = 1; i < sa.length; i ++)
{
if(sa[i].substring(0,1) == "u")
{
retV += Hex2Utf8(Str2Hex(sa[i].substring(1,5)));
}
else retV += "%" + sa[i];
}
return retV;
}
function Str2Hex(s)
{
var c = "";
var n;
var ss = "0123456789ABCDEF";
var digS = "";
for(var i = 0; i < s.length; i ++)
{
c = s.charAt(i);
n = ss.indexOf(c);
digS += Dec2Dig(eval(n));
}
//return value;
return digS;
}
function Dec2Dig(n1)
{
var s = "";
var n2 = 0;
for(var i = 0; i < 4; i++)
{
n2 = Math.pow(2,3 - i);
if(n1 >= n2)
{
s += '1';
n1 = n1 - n2;
}
else
s += '0';
}
return s;
}
function Dig2Dec(s)
{
var retV = 0;
if(s.length == 4)
{
for(var i = 0; i < 4; i ++)
{
retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);
}
return retV;
}
return -1;
}
function Hex2Utf8(s)
{
var retS = "";
var tempS = "";
var ss = "";
if(s.length == 16)
{
tempS = "1110" + s.substring(0, 4);
tempS += "10" + s.substring(4, 10);
tempS += "10" + s.substring(10,16);
var sss = "0123456789ABCDEF";
for(var i = 0; i < 3; i ++)
{
retS += "%";
ss = tempS.substring(i * 8, (eval(i)+1)*8);
retS += sss.charAt(Dig2Dec(ss.substring(0,4)));
retS += sss.charAt(Dig2Dec(ss.substring(4,8)));
}
return retS;
}
return "";
}
var url = "abc.do?....."
url = url + "&brand=" + EncodeUtf8(document.getElementById("brand").value);
document.frames["downFrame"].location=url;
提交到后台之后
在action里面,定义一个函数,用于将 iso-88591 转换成 UTF-8
private static String convertStringToUTF(String str) {
String returnString = "";
if (str == null)
return "";
try {
returnString = new String(str.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return returnString;
}
String str = convertStringToUTF(StringHelper.convertStringNull(request.getParameter("brand")));
这样,str就是中文了,可以用于数据库查询了
至此,问题顺利解决!
分享到:
相关推荐
当提交的数据中含有中文(比如变量姓名的值为中文)时,mysql_insert.jsp页面上显示新增的那条记录中的相应中文(姓名的值)乱码
初学者往往会遇到JSP处理中文时引起的乱码问题 即时一些初级教程也仅仅是使用一些表面的方法予以解决,并未深入JSP出现乱码问题的实质原理!对JSP处理字符集的理解难以深入! 本pdf文档根据网上收集的资料己本人的...
直接修改tomcat下的conf/... 您可能感兴趣的文章:jsp中文乱码 jsp mysql 乱码的解决方法JSP XMLHttpRequest动态无刷新及其中文乱码处理JSP+ MySQL中文乱码问题post提交乱码解决方案通过过滤器(Filter)解决JSP的Po
在做java项目(特别是web项目)的过程中,中文乱码一直是我们开发人员比较头疼的问题,因为涉及到编码,解码,字符集,以及国际化等诸多问题,所以在着手解决的时候也缺乏相关的知识。我花了一些时间自己动手实验了...
这个文档记录了有关jsp的一些知识,比如: jsp乱码如何解决,几种解决方案。? 一、JSP页面显示乱码二、表单提交中文时出现乱码三、数据库连接时出现乱码
在java Web应用开发中,软件开发人员最容易遇到的问题就是中文的乱码问题,其中最常见的有两种,JSP页面中文显示乱码和表单提交参数中文乱码。本文通过深入分析这两种中文乱码问题产生的原因,分别给出了对应的解决方案...
全书一共被压缩为5个rar,这是第二个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
全书一共被压缩为5个rar,这是第三个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
全书一共被压缩为5个rar,这是第四个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...
全书一共被压缩为5个rar,这是第五个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...
的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...
因前台搜索不在连接数据库,为不希望数据库放到前台的特殊用户群体提供了数据快速查询解决方案。 +安装说明+ 本系统使用asp.net+C#开发,系统运行于.net framework2.0以上版本环境中。通过将文件上传到服务器,并...
10.5.2.5 用Spring 2.0 的@Transactional标注解决事务提交问题(最佳方案) 251 10.5.2.6 使用 HibernateTemplate 实现分页查询 254 10.6 小结 255 10.7 参考资料 255 10.7.1 MyEclipse生成的Spring+Hibernate无法...
以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。 工程...