開發時使用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就好了,修改配置文件,最簡單的完美修改方法,修改mysql的my.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"%>