zoukankan      html  css  js  c++  java
  • 中文乱码解决办法

    我是用(Spring+struts2+hibernate)做的开发,然后统一用gbk作为编码。但还是出现了中文乱码的问题。

    我做注册页面的时候,表单输入中文,注册成功后,mysql数据库中的数据为???乱码。

    后来测试发现,从jsp页面传送的中文打印在eclispe后台就有问题;

    再用junit单元测试,发现从eclipse后台传送到mysql数据库也有问题。悲剧了。

    之后花了好长一段时间才逐一解决。(逐一解决,有个截断的思想和层的思想在这里面。)

    1,(jsp-->Eclipse)

    1)Struts2的国际化。

    Struts.xml配置如下属性:

    <constant name="struts.i18n.encoding" value="gbk" />

    但似乎没有起作用。据说,2.1.7之前是个bug,之后才解决掉。

    再看第二种办法。

    2)Spring自带的过滤器CharacterEncodingFilter

     在web.xml中配置如下过滤器:

     1 <!--配置中文编码的过滤器 由spring管理  -->  
    2 <filter>
    3 <filter-name>encodingFilter</filter-name>
    4 <filter-class>
    5 org.springframework.web.filter.CharacterEncodingFilter
    6 </filter-class>
    7 <init-param>
    8 <param-name>encoding</param-name>
    9 <param-value>GBK</param-value>
    10 </init-param>
    11 <init-param>
    12 <param-name>forceEncoding</param-name>
    13 <param-value>true</param-value>
    14 </init-param>
    15 </filter>
    16 <filter-mapping>
    17 <filter-name>encodingFilter</filter-name>
    18 <url-pattern>/*</url-pattern>
    19 </filter-mapping>

    很悲剧的,没起作用。还好最后从网上搜来了下面的办法。

    3)将表单的提交方式改成post。

    OK,解决了。我也不知道如何解释。

    2,(Eclipse-->mysql)

    我用的是客户端是Navicat for MySQL

    下面补充下知识:

     MySQL的字符集支持细化到四个层次:服务器(server),数据库(database),数据表(table)和连接(connection)。

    1)在安装配置MySql的时候,选择gbk字符集。

    2)找到MySQL服务端的安装盘,找到my.ini文件。我的在C:\Program Files\MySQL\MySQL Server 5.1目录下。

    [client]  default-character-set = utf8
    [mysqld]  character_set_server =  utf8

    然后重启mysql的服务。

    3)使用命令

    mysql> show variables like 'char%';

    或者mysql> show variables like 'collation_%';

    该命令可以查看数据库编码。

    可以用命令去修改:

    例如:mysql>  set character_set_client  =  gbk;

    等等。。。

    你也许可能发现,还是会出现乱码,那么看下面:

    在发送查询之前,执行set names gbk;

    相当于下面三条命令:
    SET character_set_client = gbk;
    SET character_set_results = gbk;
    SET character_set_connection = gbk;

    也不知道是我的运气背还是没用好,我的项目几乎都试了,没用。

    最后从某个互联网旮旯搜到一处起死回生的招数:

    ①建数据库如下:

    create database dbname DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

    ② 建表的时候,加一句:ENGINE=MyISAM DEFAULT CHARSET=gbk

    create tbale tablename(

    id int primary key,

    name varchar(20)

    )ENGINE=MyISAM DEFAULT CHARSET=gbk;

     

    总结:我们总是在频繁的不断遇到问题,不断解决问题。这样我们有所提高,有点变态,但现实我们就是这么提高的。解决办法总是有很多,关键是找准咯。

  • 相关阅读:
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
    云原生时代,2个方案轻松加速百万级镜像
    Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
  • 原文地址:https://www.cnblogs.com/csuwangwei/p/2283652.html
Copyright © 2011-2022 走看看