铜陵先锋网络科技有限公司 www.tlxf.net
换个颜色看网站:
新闻资讯 您的位置:技术文档 >> 解决jsp,tomcat,MYSQL下中文乱码问题

解决jsp,tomcat,MYSQL下中文乱码问题

发布:不详  |  发布时间:14-05-28  |  点击次数:

以下文章转自互联网,以备自查,若有版权请及时联系我们删除,谢谢!

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.FilterConfig;
public class SetCharacterEncodingFilter implements Filter {
    protected String encoding;
    protected FilterConfig filterConfig;
    protected boolean ignore;
    public SetCharacterEncodingFilter(){
            encoding=null;
            filterConfig=null;
            ignore=true;
    }
    public void destroy(){
        encoding=null;
        filterConfig=null;
    }

    //真实的设置Encoding的代码
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException{
        if(ignore||request.getCharacterEncoding()==null){
            String encoding=selectEncoding(request);
            if(encoding!=null) request.setCharacterEncoding(encoding);
        }
        chain.doFilter(request, response);
    }

        //进入这个过滤器,首先执行的是init方法,此处代码从web.xml中得到系统是否要setCharacterEncoding并且用哪种编码
        public void init(FilterConfig filterConfig)throws ServletException{
            this.filterConfig=filterConfig;
            encoding=filterConfig.getInitParameter("encoding");
            String value=filterConfig.getInitParameter("ignore");
            if(value==null)    ignore=true;
            else if(value.equalsIgnoreCase("true")) ignore=true;
            else if(value.equalsIgnoreCase("yes")) ignore=true;
            else ignore=false;
        }
        protected String selectEncoding(ServletRequest request){
            return encoding;

}

}

把/root/apache-tomcat-5.5.23/webapps/servlets-examples/WEB-INF/classes/filters目录下把
SetCharacterEncodingFilter.class导入工程的包中,例如我的为zhouzhiwei.survey.books
在工程目录的WebRoot/WEB-INF/web.xml添加
<filter>
        <filter-name>setCharEncoding</filter-name>
        <filter-class>cn.myWiki.tools.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>gb2312</param-value>
        </init-param>
        <init-param>
            <param-name>enable</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>setCharEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

以下内容有关Mysql的中文处理

    这段时间做的项目要用到Mysql。一说到Mysql ,中文问题就是初使用者的一个门槛!每个要录入中文的功能、表都不可避免的问题.在这里就以我做的一个小型测试项目(日记管理系统)说起,开发工具myeclipse6.0, Dreamweaver8.0,数据库Mysql 6.0 ,notepad编写SQL,服务器:JBOSS4.0
    首先在建立WEB工程的时候要选好编码,我们一般用UTF-8,因为UTF-8是国际标准编码,集成的字符集比GBK 、GBK2312要多. 也有利于整个项目的扩展性。


     然后到每一个Servlet ,jsp 页面都要将编码设置成UTF-8,还有一个问题就是JBOSS 是会区分UTF-8的大小写的所以最好就是用大写,以免功亏一篑。

     JSP里面的设置:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    还有在META 里面也要设置 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

到了最关键的地方就是连接数据库的语句.(在本工程里面用的是JDBC直连,可以去MYSQL官方网站下载驱动)
要在语句后面加两个参数,代码如下:
url = "jdbc:mysql://localhost/diarydb?useUnicode=true&characterEncoding=UTF-8";
注意在Hibernate中要改成这样 把“&”符号改成 html标记 &amp; 否则报错

try {

    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection(url,"user","pwd");
    stmt = con.createStatement();

   } catch (ClassNotFoundException e) {
    // TODO: handle exception
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
到这里为止整个工程的设置告一段落,后面紧跟着的就是建库,建表的设置问题;
如果对MYSQL语句不熟,可以直接用客户端工具(本人推荐navicat 不过是要钱D,这没关系,破解版在中国是没办法找不到的) , 但我在这里就只演示一下代码,如下:

drop database diarydb;
create database diarydb;
alter database diarydb character set utf8;         ----设置数据库编码;
use diarydb;
create table userinfotable
(
uid int primary key not null ,
uname varchar(20) ,
upwd varchar(20),
uclass int

)ENGINE=InnoDB DEFAULT CHARSET=utf8;       -----设置表的编码;

好啦,经过以上一翻掘地三尺的设置,我们可爱的中文终于可以显示在久违了的browser上了.各位使用MYSQL遇到中文问题的朋友们,希望我的这些资料能帮上你的忙……

mysql对中文的支持不是很好,对编码的分类很细,可以细到某个数据库里面的某个表的某个列用什么编码。默认情况下用的是latin1,要显示中文的话就要用utf8,一般创建数据库都不会明确的写用什么编码,所以问题就出现了。解决办法是把mysql安装文件夹下面的my.ini里面所有的default-character-set=lartin1改为=utf8,然后重启数据库,并把原来建的数据库重新建一次(因为改之前建的用了lartin1的编码,如果不方便重建也可以选择把它倒出来再导回去)。

以上是对于在Windows环境下Mysql的配置。如下是在linux环境下的配置:

中文存入mysql数据表出现的乱码,从JSP页面读取mysql中文数据出现乱码,以及在sell环境下查看数据库表中文数据出现乱码。

linux平台:ubuntu6.10

mysql版本:5.0

浏览器:firefox2.0

为了解决中文乱码的问题首先就是要同一字符集,我采用utf-8。

第一步:安装mysql后,修改配置文件/etc/mysql/my.cnf 找到相应项并添加如下字段,如下所示:(注意是添加,配置文件中其他不相关的内容下面并没有列出来)

[client]

default-character-set=utf8

[mysqld_safe]

default-character-set=utf8

[mysqld]

default-character-set=utf8

[mysql]

default-character-set=utf8

重新启动mysql服务,进入sell终端,进入mysql的命令提示符下输入如下指令:

mysql>show variables like '%char%';

如果出现的列表各项内容和以下相同表明配置成功了,

+-----------------------+-----------------------

| Variable_name | Value

+-----------------------+-----------------------

| character_set_client | utf8

| character_set_connection | utf8

| character_set_database | utf8

| character_set_filesystem | binary

| character_set_results | utf8

| character_set_server | utf8

| character_set_system | utf8

| character_sets_dir | /usr/share/mysql/charsets/

+---------------------+---------------------------

第二步:在要发送中文或者要读取中文的JSP页面(最好所有页面)都添加如下声明:

<%@page pageEncoding="UTF-8"%>

<%@ page contentType="text/html;charset=utf-8"%>

<% request.setCharacterEncoding("utf-8"); %>

在<head>标签对中添加如下:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

注意在servlet中对请求进行响应的方法中同样要有:

response.setContentType("text/html;charset=utf-8");

第三步:(由于不明原因firefox发送的请求仍然是latin1的时候执行这一步)

在将请求的参数插入数据库之前还要再执行一次转码(将latin1编码转换为utf-8),例如:

String utf8_str = new String( latin_str .getBytes("latin1"),"utf-8");

这一步可以写在一个过滤器中,不怕麻烦也可以在每一次在将请求数据插入之前都进行一次转码。

另外:在连接数据库的时候可以不用加上字符集参数了,直接用用户名和密码连接就可以了,如连接:

con=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名","用户名","密码");

 

上一篇:安装版的tomcat6.0 内存设置【tomcat6.0内存溢出】
下一篇:apache与tomcat整合共用80端口(ajp与http proxy)
服务通道
我们做什么
联系我们 地址:安徽省铜陵市大学生创业园2期13号
 
 
客服A:81930814 在线咨询   咨询:9610159 在线咨询
客服B:81930844 在线咨询   咨询:3431486 在线咨询
服务宗旨:最大限度地满足客户的需求,真诚为客户服务! Copyright © 2008 铜陵先锋网络科技有限公司 TLXF.NET 版权所有   ICP08004161