SSM項目經常遇到的亂碼問題


開發時使用jetty一切正常的項目,部署到linux中tomcat下,卧槽,各種亂碼問題,記錄一下解決過程:

1.  路徑上有中文無法打開,是因為tomcat不支持

修改conf/server.xml,添加URIEncoding(搜索port="8080")

  

 <Connector port="8080" protocol="HTTP/1.1"

            connectionTimeout="20000"

            redirectPort="8443"

         URIEncoding="UTF-8"/>

2.  form提交后,(springmvc)后台接受到亂碼

web.xml添加過濾器:

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</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.  Mybaits中文查不出數據

使用 類似Mybatis查詢在語句select..from.. where s.username= #{username} 查詢條件查詢

傳入username的是中文,在數據庫中可以正常查詢出來,但是mybatis查不出來(執行查詢結果顯示返回0條數據),折騰了很久,懷疑還是編碼問題導致。

以下是網上找到的解決辦法,果然有效! (個人安裝的my.cnf文件只有mysqld選項,所以只要在[mysqld]下添加一行default-character-set=utf8就行)

估計數據庫編碼是latin的吧,最終找到原因,數據庫安裝后,編碼沒設置,設置成utf-8就好了,修改配置文件,最簡單的完美修改方法,修改mysqlmy.cnf文件中的字符集鍵值(注意配置的字段細節):

1、在[client]字段里加入default-character-set=utf8,如下:

 

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8

2、在[mysqld]字段里加入character-set-server=utf8,如下:

 

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8

3、在[mysql]字段里加入default-character-set=utf8,如下:

[mysql]
no-auto-rehash
default-character-set=utf8

修改完成后,service mysql restart重啟mysql服務就生效。

 

再一查詢OK

 

 

4.其他應該注意的地方

在springmvc配置中有編碼配置的地方,一律UTF-8

如果使用servlet,response寫中文返回,記得加上:

response.setHeader("Content-type", "text/html;charset=UTF-8");  

使用JSP,不要忘記修改:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM