jsp到mysql中文乱码

对于乱码问题,从jsp到mysql数据库之间的每一个步骤都要保证编码一致,包括数据库,连接数据库,jsp页面,浏览器,浏览器-jsp-antion之间传值时的编码即过滤器
这里以gbk编码为例。
1数据库:
  1)创建gbk编码的数据库:

GBK: create database dbname DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

(UTF8: CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;)

2)设置连接数据库的编码:
    这里用了datasource:

jdbcUrl="jdbc:mysql://localhost/sshblog?useUnicode=true&characterEncoding=gbk"

接着可以通过show create table tablename;查看表的编码是否为gbk;

2.浏览器,jsp页面:
<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="gbk"%>

<% request.setCharacterEncoding("gbk"); %>

(虽然你的jsp页面设置了gbk,但是浏览器没有设置,需要设置浏览器编码方式,注意浏览器的编码方式设置成utf-8,因为浏览器没有gbk格式)

3.设置一个过滤器package org.jb.common.filter; 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 = "GBK"; this.enable = false; } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("GBK"); chain.doFilter(request, response); } public void destroy() { } } web.xml配置加 <filter> <filter-name>encodefilter</filter-name> <filter-class>org.jb.common.filter.SetCharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encodefilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>成功,所以说对于乱码问题要从头到尾都编码一致,包括数据库,连接数据库,jsp页面,浏览器,浏览器-jsp-antion之间传值时的
编码即过滤器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值