解决jsp中传递参数汉字乱码问题
问题描述:
1 表单提交的数据,⽤Parameter(“xxx”)返回的字符串为乱码或者??
2 直接通过url如localhost/a.jsp?name=中国,这样的get请求在服务端⽤request. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有⽤或者⽤request.setCharacterEncoding("GBK");也不管⽤schematica
原因:
1 tomcat的j2ee实现对表单提交即post⽅式提⽰时处理参数采⽤缺省的iso-8859-1来处理
2 tomcat对get⽅式提交的请求对query-string 处理时采⽤了和post⽅法不⼀样的处理⽅式。(与tomcat4不⼀样,所以设置setCharacterEncoding(“gbk”))不起作⽤。
解决办法:
⾸先所有的jsp⽂件都加上:
1 实现⼀个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples⽬录有⼀个完整的例⼦。请参考l和SetCharacterEncodingFilter的配置。)
1)只要把%TOMCAT安装⽬录%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class⽂件拷到你的webapp⽬录/filters下,如果没有filters⽬录,就创建⼀个。
2)在你的l⾥加⼊如下⼏⾏:
<filter>
< filter-name>Set Character Encoding</filter-name>
< filter-class>filters.SetCharacterEncodingFilter</filter-class>
< init-param>
< param-name>encoding</param-name>
< param-value>GBK</param-value>
< /init-param>
< /filter>
< filter-mapping>
< filter-name>Set Character Encoding</filter-name>
< url-pattern>/*</url-pattern>
< /filter-mapping>
linux免费教学视频3)完成.
2 get⽅式的解决办法
1) 打开tomcat的l⽂件,到区块,加⼊如下⼀⾏:
URIEncoding=”GBK”
完整的应如下:
<Connector
port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="GBK"
/>
2)重启tomcat,⼀切OK。
⼀、JSP页⾯显⽰乱码
下⾯的显⽰页⾯(display.jsp)就出现乱码:
<html>
< head>
< title>JSP的中⽂处理</title>
< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< /head>
< body>
< %
out.print("JSP的中⽂处理");
%>
< /body>
< /html>
对不同的WEB服务器和不同的JDK版本,处理结果就不⼀样。原因:服务器使⽤的编码⽅式不同和浏
览器对不同的字符显⽰结果不同⽽导致的。解决办法:在JSP页⾯中指定编码⽅式(gb2312),即在页⾯的第⼀⾏加上:<%@ page contentType="text/html;
charset=gb2312"%>,就可以消除乱码了。完整页⾯如下:
< %@ page contentType="text/html; charset=gb2312"%>
< html>
< head>
< title>JSP的中⽂处理</title>
< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< /head>loads of
< body>
< %
out.print("JSP的中⽂处理");
%>
< /body>
< /html>
⼆、表单提交中⽂时出现乱码
下⾯是⼀个提交页⾯(submit.jsp),代码如下:
<html>
< head>
< title>JSP的中⽂处理</title>
< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< /head>
< body>
< form name="form1" method="post" action="process.jsp">
< div align="center">
< input type="text" name="name">
< input type="submit" name="Submit" value="Submit">
< /div>
< /form>
< /body>
< /html>
下⾯是处理页⾯(process.jsp)代码:
< %@ page contentType="text/html; charset=gb2312"%>
< html>
< head>
< title>JSP的中⽂处理</title>
< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< /head>
< body>
< %=Parameter("name")%>
< /body>
< /html>
如果submit.jsp提交英⽂字符能正确显⽰,如果提交中⽂时就会出现乱码。原因:浏览器默认使⽤UTF-8编码⽅式来发送请求,⽽UTF-8和GB2312编码⽅式表⽰字符时不⼀样,这样就出现了不能识别字符。解决办法:通过request.seCharacterEncoding("gb2312")对请求进⾏统⼀编码,就实现了中⽂的正常显⽰。修改后的process.jsp代码如下:
< %@ page contentType="text/html; charset=gb2312"%>
< %
request.seCharacterEncoding("gb2312");
%>
< html>
< head>
< title>JSP的中⽂处理</title>
< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< /head>
< body>
< %=Parameter("name")%>
< /body>
< /html>
三、数据库连接出现乱码
informal反义词只要涉及中⽂的地⽅全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。
四、数据库的显⽰乱码
在mysql4.1.0中,varchar类型,text类型就会出现中⽂乱码,对于varchar类型把它设为binary属性就可以解决中⽂问题,对于text类型就要⽤⼀个编码转换类来处理,实现如下:
public class Convert {
/** 把ISO-8859-1码转换成GB2312
*/
public static String ISOtoGB(String iso){
String gb;
try{
if(iso.equals("") || iso == null){
return "";
}
else{
iso = im();
gb = new Bytes("ISO-8859-1"),"GB2312");
return gb;
}
}
catch(Exception e){
return "";
}
}
}
把它编译成class,就可以调⽤Convert类的静态⽅法ISOtoGB()来转换编码。
以上都是我遇到问题时从⽹上搜的答案,但都没有解决问题。
我们同学的解决⽅法是他加⼊了⼀个类如下:
public String GBToUnicode(String strIn)
{
数据库的instr是干什么的
jsp中文全称String strOut = null;
if(strIn == null || (im()).equals(""))return strIn;
try{
byte[] b = Bytes("ISO8859_1");
strOut = new String(b,"GBK");
}
catch(Exception e)
{}
return strOut;
}
我⾃⼰的解决⽅法是调⽤getParameter时采⽤的⽅法是:
1. String name=new Parameter("uname").getBytes("ISO-8859-1"));
2. String Parameter("uname");
byte[] Bytes("ISO8859-1");
name=new String(b);
⽤<%=name%> 即可输出传递过来的中⽂信息
注:若还是汉字乱码,重启服务器、换⼀个服务器重启、重启eclipse(bug导致的),最后⼀定⾏的。 ⾄今我⽤这些招从来没有乱码了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论