我做的是一个小测试jsp和mysql和程序,就是用jsp页面传入的参数放入数据库后再读出来。刚开始的时候我没有用request.setCharacterEncodiing(“gb2312”)设置处理乱码,结果数据库里存入的是正确的汉字(既没有出现乱码),而页面上则出现了乱码,从数据库中读出后显示在页面上的数据是乱码!后面我在页面上设置了request.setCharacterEncoding(“gb2312”)后,还写了一个filter对请求进行了统一的编码成gb2312,这样直接在页面间传递的参数正常了,但是从mysql中取出的数据成乱码了,而且mysql中存入的也是乱码!请问各位大虾这个问题怎么解决?
我jdbc的连接地址是:jdbc:mysql://localhost:3306/mysqlencoding?useUnicode=true&characterEncoding=gb2312
我的Filter中的内容为:
package tian.bin.mysql;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class EncodingFilter implements Filter { private String charset="";
@Override
public void destroy()
{ } @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(this.charset);
response.setCharacterEncoding(this.charset);
chain.doFilter(request, response);
} @Override
public void init(FilterConfig config) throws ServletException
{
this.charset=config.getInitParameter("charset");
}}
其他页面都设置了request.setCharacterEncoding("gb2312");而且都是
<%@ page contentType="text/html;charset=gb2312"%>
就是不行?
请大家帮忙看看!谢谢了!
我jdbc的连接地址是:jdbc:mysql://localhost:3306/mysqlencoding?useUnicode=true&characterEncoding=gb2312
我的Filter中的内容为:
package tian.bin.mysql;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class EncodingFilter implements Filter { private String charset="";
@Override
public void destroy()
{ } @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(this.charset);
response.setCharacterEncoding(this.charset);
chain.doFilter(request, response);
} @Override
public void init(FilterConfig config) throws ServletException
{
this.charset=config.getInitParameter("charset");
}}
其他页面都设置了request.setCharacterEncoding("gb2312");而且都是
<%@ page contentType="text/html;charset=gb2312"%>
就是不行?
请大家帮忙看看!谢谢了!
解决方案 »
- ie6 ie7 ie8解析js的微小区别
- 求JSF下载具体地址
- 讨论关于权限问题。
- 请问JavaScript如何生成这个XML文件?
- CSDN,怎么让这种垃圾当版主?
- JSF框架Select标签问题
- 关于Struts标签html:link问题??????????
- 谁可以帮我详细解释一下集合器之间的关系吗???比如vector,iterator,hastable,hasmap,list,我是新手,看think in java 的第八章把我的
- EJB究竟适合我们吗?
- weblogic7下怎样用目录展开格式来部署WEB应用程序?
- JAVA-WEB 权限问题,请教大哥们
- 请教用xpath怎么找紧跟着下一个兄弟节点?
建议全部用utf-8
统一后,很难出现乱码
数据库是否支持中文.创建数据库并添加数据测试,确保数据库支持中文。第二种情况:
输入源出现乱码,一般情况是在jsp页面的表单数据提交到actionForm时产生的乱码,
这种情况可以使用过滤器解决解决方案:a.设置jsp页面的编号为gbk
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
b.配置过滤器:
过滤器配置在web.xml文件中的<servlet>之后,经验。
可以是自己定义字符过滤器,spring字符的过滤器。
<!--spring的字符过滤器-->
<filter>
<filter-name>SpringCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpringCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--自定义字符过滤器-->
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;
public class SetCharacterEncodingFilter implements Filter {
protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable;
public SetCharacterEncodingFilter() {
this.encodingName = "UTF-8";
this.enable = false;
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
loadConfigParams();
}
private void loadConfigParams() {
this.encodingName = this.filterConfig.getInitParameter("encoding");
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if (strIgnoreFlag.equalsIgnoreCase("true")) {
this.enable = true;
} else {
this.enable = false;
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(this.enable) {
request.setCharacterEncoding(this.encodingName);
response.setCharacterEncoding(this.encodingName);
}
chain.doFilter(request, response);
}
public void destroy() {
}
}
然后在web.xml中加入Filter的描述和参数配置:
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>com.test.util.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
this.charset=config.getInitParameter("charset");
你确信你读取到了正确的字符集了吗?