jsp乱码问题有什么彻底的解决方法

彻底的解决方法

由于jdk中只规定了必须有一些unicode utf8
等编码的实现,
好像对汉字编码没有什么实现的硬性规定,
所以有时候就会出现乱码问题。

数据库访问时的乱码问题,可以数据库连接中加上useunicode =true 以及用gbk 或gb2312编码就可以了:
在建立数据库时,将数据库中的所有表的编码方式都设置为gbk,原因是JSP中也使用了gbk编码,这样统一的结果是可以减少

很多不必要的编码转换问题。另外,在使用JDBC连接MySQL数据库时,连接字符串写成如下形式可以避免一些中文问题:

jdbc://mysql://hostname:port/DBname?user=username&
password=pwd&
useUnicode=True&
characterEncoding=gbk

如果是以数据源的方式连接数据库,在配置文件中使用:
<parameter>
<name>url</name>
<value>
jdbc://mysql://hostname:port/DBname?&useUnicode=True&characterEncoding=gbk
</value>
</parameter>
但是,如果使用一个已经存在的数据库,数据库的编码方式是ISO-8859-1,而Web应用中使用UTF-8,且数据库中已经有很多

重要信息,因此不能通过更改数据库的编码方式来解决问题。这个时候,在往数据库中写数据库时,一定要在JDBC连接字符串中加入

“useUnicode=True&characterEncoding=ISO-8859-1”,这样可以顺利的往数据库中写入正常的数据。但是,在将数据读出数据库时

,乱码又会出现,这个时候就应该在数据取出时对其转码,可以将转码功能写为一个函数,具体实现如下:
public String charConvert(String src){
String result=null;
if(src!=null){
try{

// 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组->通过使用指定的 charset 解码指定的

byte 数组,构造一个新的 String。
result=new String(src.getBytes("ISO-8859-1"),"gbk");
}catch(Exception e)
{
result=null;
}
}
return result;
} 于是,在从数据库读出数据过后调用charConvert(rs.getString("colName")),这样就可以正常显示数据库中的中文数据了



JSP中输出中文的乱码问题
所谓在JSP输出中文,即直接在JSP中输出中文,或者给变量赋中文值再输出等,这种情况下的乱码问题往往是因为没有给JSP页面制

定显示字符的编码方式,解决问题如下:

·在JSP页面头部加上语句<%@ page contentType="text/html;charset=gbk"%>(在Servlet页面中使用

httpServletResponse.setContentType("text/html;charset=gbk")),最好同时在JSP页面的head部分加上<meta http-

equiv="Content-Type" content="text/html;charset=gbk">

·在每次要输出中文的地方主动转换编码方式,比如要在页面中输入“中文”二字,就可以用以下方式:

<%
String str="中文";
byte[] tmpbyte=str.getBtyes("ISO-8859-1");
str=new String(tmpbyte);
out.print(str);
%>

获取表单提交的数据时的中文乱码问题

在没有加任何其他处理之前,用request.getParameter(panamName)获取表单提交中的数据,且表单数据中含有中文时,返回

的字符串会出现乱码。出现这种问题的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理


比如,建立一个test.jsp,内容为:
<%@ page contentTyp="text/html;charset=gbk"%>
<%
String str=request.getParameter("chStr");
if(str==null) str="没有输入值";
%>
<html>
<head>
<title>中文Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=gbk">
<meta http-equiv=param content=no-cache>
</head>
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
请输入中文:<input type="text" name="chStr">
<input type="submit" value="确定">
</form>
</body>
</html>

运行过后,在输入框中输入汉字“中文”,提交过后再显示出来后就变成了一堆乱码。解决此问题的办法有两个。一是不修

改其他设置,只是在将表单中的中文数据取出来过后再转换编码,方法如语句String str=request.getParameter("chStr");String

str=new String(sre.getByte("ISO-8859-1"),"gbk"),但这种方法只是从一个局部来考虑问题,如果这样的地方太多,就不得不将这

条语句重复写很多次,在比较大的项目中,这是一种不太可行的方案。另一个方法就是让对所有页面的请求都通过一个Filter,将处

理字符集设置为gbk。具体的做法如下(在Tomcat的webapps/servlet-examples目录有一个完整的例子,也可以参考其中web.xml和

SetCharacter EncodingFilter的配置):

首先将%TOMCAT%/webapps/servlets-examples/Web-INF/classes/filters/目录下的文件SetCharacterEncodingFilter.class

拷贝到自己应用的/Web-INF/classes/com/util/filter目录下;然后再在web.xml文件的<web-app>后面加上如下配置代码:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.ccut.struts.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>

URL中的中文问题

对于直接通过在URL中传递中文参数,如“http://localhost/a.jsp?str=中文”这样的get请求,在服务端用

request.getParameter("name")时返回的往往是乱码。按以上的做法设置Filter没有用,用request.setCharacterEncoding("gbk")

的方式,仍然不管用。
例如,建立test2.jsp文件,内容为:

<%@ page contentTyp="text/html;charset=gbk"%>
<%
String str=request.getParameter("chStr");
if(str==null) str="没有输入值";
%>
<html>
<head>
<title>中文Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=gbk">
<meta http-equiv=param content=no-cache>
</head>
<body>你输入的内容为:<%=str%><br>
<form action="test.jsp" method="post">
<a href="test2.jsp?chStr=中文">点击这里提交中文参数</a>
</form>
</body>
</html>

运行后,可见通过URL传递的中文参数取出来过后变成了乱码,造成这种结果的原因是Tomcat中以get方式提交的请求对

query-string处理时采用了和post方法不一样的处理方式。
解决这个问题的方法是打开Tomcat安装目录下的/conf/server.xml文件,找到Connector块,往其中添加URIEncoding="gbk"

,添加过后完整的Connector块代码如下:
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="gbk"
/>

在Struts中证实可以解决URI传递乱码问题.
可以这样做
1.设定Tomcat的URI编码为"UTF-8":修改%tomcat%\conf\server.xml中的<Connector>在中间加入URIEncoding="UTF-8";
2.先在页面上encodeURI(url);
3.后台代码中直接取出来的中文参数就已经OK了.
4. 试一试request.setCharacterEncoding("GBK");
不过这种方法用在servlet中行不通,在servlet中就必须对URI进行处理,Tomcat中有没有加入URIEncoding都没有差别.
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-03
直接使用拦截器即可解决,这种比较彻底,一个拦截器全软件通杀。
其它的任何方法都不能解决根本问题,没必要花时间去研究。

jsp乱码问题有什么彻底的解决方法
直接使用拦截器即可解决,这种比较彻底,一个拦截器全软件通杀。 其它的任何方法都不能解决根本问题,没必要花时间去研究。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 为你推荐: 特别推荐 全球首张奥密克戎毒株图公布:新变异株传染性或增强500%? 不断刷新的圆周率,未来会被算尽吗? 地球上演化4.8亿年,...

JSP中文乱码问题如何解决?
在Java文件中,若包含中文,且编译成class文件时使用的编码方式与源文件编码不一致,则会产生乱码。解决方法是在编写Java文件时尽量避免中文(注释部分例外),必要时手动指定编码参数(如'-ecoding GBK'或'-ecoding gb2312')进行编译;对于JSP文件,在文件头加入相应的编码声明可解决此类乱码问题。本文重...

程序中的乱码问题怎么解决啊
只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。四、数据库的显示乱码 在mysql4.1.0中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,对于text类型就要用一个编码转换类来处理,实现如下:...

如何解决网页中文乱码问题
1. JSP页面显示中文乱码问题通常是由于未在JSP文件中指定字符集编码所致。解决方法是在JSP页面的顶部添加以下代码来指定字符集为UTF-8:```jsp ```2. 数据库中文乱码问题可能会导致插入或查询数据库时中文数据出现乱码。解决方法包括在数据库连接字符串中指定字符集为UTF-8,以及在JSP页面中设置响应和...

Linux环境JSP乱码解决方案linuxjsp乱码
1. 首先,通过在浏览器查看网页源码,确定乱码原因:若显示”&# xx; “格式,则根据该数字值可以确定乱码字符的编码,具体的编码参考即可确定;若是乱码而且显示的文字不同,则说明框架中返回了不同的编码格式字符;2. 根据浏览器查看网页源码,修改JSP服务器及数据库的字符集编码,以确保...

jsp中处理中文乱码的解决方案有哪些
1、Tomcat 的 server.xml 文件,设置服务器端口工作方式 2、Servlet 和 JavaBean 对字符串字符集处理的统一 3、JSP页面的字符集统一 完成这三点统一,中文想乱码都难,如果使用MySQL的话,数据表也需要做UTF-8统一。修改Tomcat的server.xml文件,该文件位于 tomcat\/conf,红色部分为添加部分,也就是当前...

JSP乱码一般有什么解决办法?
或者把ISO8859-1和GB2312 的位置换一下,自己多试试,就能找到解决问题的办法。将乱码问题分为三类JSP页面显示中文乱码;表单提交乱码;数据库应用乱码 1) JSP页面内输出中文时出现乱码 解决方案在JSP文件中使用page命令指定响应结果的MIME类型,如<%@ page language="java" contentType="text\/html;...

JSP页面中文乱码问题解决方法
JSP页面中文乱码问题解决方法 1.新建两个JSP页面 2.在c.jsp中新建一个表单 3.在d.jsp中接收这个值 4.运行c.jsp 5.输入带中文的参数,点击提交 6.发现接收过来的中文是乱码,英文正常 解释下:JSP默认参数在传输过程中使用的编码为ISO-8859-1 而两个页面使用的都是UTF-8 的编码 7.在d.jsp中...

怎么解决JSP页面上的乱码?
getBytes(“gb2312”),”8859_1”)的转换。5、长江电力网站解决中文问题的方法是:1)在catalina.sh文件中的相关位置添加下面一行 -Dfile.encoding=GBK \\ 2)在每个jsp文件的最前面添加下面两行 <%@ page contentType="text\/html; charset=GBK" %> <%request.setCharacterEncoding("GBK");%> ...

有谁知道中文乱码问题
如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.seCharacterEncoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。修改后的process....

相似回答
大家正在搜