[總結]使用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的配置文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章