• 中文乱码解决办法


    我是用(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;

     

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

  • 相关阅读:
    Linux下文件权限的设置
    JavaEE中一些缩写的含义
    Xcode7.1环境下上架iOS App到AppStore 流程 转
    iOS UILabel UITextView自适应文本,或文本大小自适应
    Xcode常用快捷键总结
    iOS9的新特性以及适配方案-----转载
    Python下读取转换unicode的json格式
    python pip 不能用报错: ImportError: No module named _internal
    Python获取二维数组的行列数
    Python作用域
  • 原文地址:https://www.cnblogs.com/csuwangwei/p/2283652.html
Copyright © 2020-2023  润新知