[总结]使用ssh架构服务器uri中的中文乱码解决

前提是想进行中文搜索,结果发送请求的uri中的中文不能正确识别。

照着网上教程
1.先将数据库以utf-8格式重新建立 

drop database if exists game;
create database if not exists game  default charset utf8 collate utf8_unicode_ci;
use game;
CREATE TABLE `books`(
`book_id` int(11) NOT NULL default '0' ,
`book_name` varchar(200)  character set utf8 default NULL,
`book_author` varchar(100)  character set utf8 default NULL,
`book_publish` varchar(100)  character set utf8 default NULL,
`book_date` date default NULL,
`book_isbn` varchar(20) default NULL,
`book_page` int(11) default NULL,
`book_price` decimal(10,2) default NULL,
`book_content` varchar(100)  character set utf8 default NULL,
PRIMARY KEY  (`book_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED  collate=utf8_general_ci ;

注意红字部分的字符集设置。
然后需要修改mysql的my.ini配置文件中的所有字符集设置为utf-8.
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
character-set-server=utf8
最后为了验证效果,用cmd打开windows命令窗,进入mysql的bin文件夹路径下,
*输入:mysql -u root -p,
*输入密码进入mysql。
*然后输入:use game;(我以上面的例子代码为例,用具体要看的数据库名代替game即可)
*然后输入:show variables like 'char%';(输入char或者输入全名character都行)
就会出现如下显示,除了character_set_filesystem外,其他的都是utf-8就对了。 

2.修改struts,spring,hibernate中的字符集设置均为utf-8

sturs.xml中<struts>标签下加入:
<constant name="struts.i18n.encoding" value="UTF-8" />

hibernate.cfg.xml中<session-factory>标签下加入:
<property name="connection.useUnicode">true</property> 
<property name="connection.characterEncoding">UTF-8</property>

web.xml中<web-app>标签下加入:
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>com.commons.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
 </filter>
 
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3.搜索中文时,uri中的中文就会造成如下错误

Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (utf8_general_ci,....

在网上搜索后,原因是tomcat中未设置uri编码,导致碰到中文tomcat就使用了GB2312编码。

解决:在
Tomcat\conf\server.xml中 找到
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443"/>
改成:
<Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="8443"   URIEncoding="UTF-8"/>
就可以了  

20150408更新   如果是用Eclipse接管了tomcat,那么我们修改的配置文件就在Eclipse工程目录下Servers/Tomcat 7.0......-conf/server.xml,修改的地方是一样的。因为我们在publish server的时候,Eclipse会把我们使用的server的配置文件等全部覆盖tomcat默认目录下的配置,所以如果Eclipse接管了tomcat,就需要改Eclipse工程目录下我们使用的server的配置文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值