本篇內容如下,主要解決各種亂碼問題。
綜合解決措施,直接跳轉到文末
數據的流動,是從瀏覽器頁面->Java后台程序->數據庫
亂碼的發生,一般原因是編解碼的字符集不統一造成的。也就是這三者之間數據流動時,字符集不統一造成的。
記錄一下最近遇見過的幾種亂碼問題。
一、瀏覽器頁面亂碼
1、現象:瀏覽器頁面亂碼
問題:正常的SSM項目,啟動后頁面出現中文亂碼。
分析:可能是使用了tomcat高版本導致的亂碼問題。
解決:IDEA中-edit configurations-VM options設置:-Dfile.encoding=UTF-8
二、Debug后台獲取到的中文數據亂碼
2、現象:發現數據亂碼后,debug發現Java后台程序中接收的時候就已經出現了亂碼。
分析:在Java后端程序中,解析前端參數和數據前,需要指定字符集;否則就會出現亂碼。
在J2EE中,需要request.setEcoding,並且該指令需要在獲取任意參數最前面執行。
在SSM等框架中,則是在配置文件中,設置攔截器,指定編碼字符集為UTF-8。
三、數據庫存儲中文亂碼
3、現象:Java后端程序debug是正常顯示中文,但數據庫中存儲時,中文變成了亂碼。
分析:數據庫字符集錯誤,或者沒有指定存儲的時候字符集。
解決:
這里需要注意。與數據庫連接的URL中,一定要設置如下:
url=jdbc:mysql://localhost/user_test?useUnicode=true&characterEncoding=utf-8
需要帶有后綴:設置字符集且指定為UTF-8。
另外,網上其它資料,如:
1、在命令行中設置MySQL的編碼格式,將latin改為UTF-8;
2、查看數據庫建庫語句,數據庫建立的時候,是否指定了字符集為UTF-8;
但是,一定要確保了了URL中指定了字符集,這個是首要前提。
因為,經過嘗試,即使嘗試過后面兩種方式,確定是UTF-8后,亂碼問題仍然存在。
最終,修改了URL,在URL中添加了指定字符集后綴,才解決了中文存入數據庫亂碼問題。
四、其它亂碼問題:
1、控制台 tomcat catalina log亂碼問題。
2、控制台 tomcat local log亂碼問題。
修改tomcat配置文件logging.properties,將此文件中所有的編碼格式均指定為GBK則可以解決以上兩個問題。
有些教程說修改所有編碼為GBK,有些說保持UTF-8不要修改,暫時還未搞清究竟應該設置哪個。
但這里的配置,對以上兩項是否輸出亂碼是有影響的,這是確定的。
配置如下,有些tomcat的logging.properties是不完整的,不同版本不一樣。
根據網上教程完善指定編碼,或者直接如下添加,應該都可。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
五、idea編譯亂碼(解決server控制台輸出中文亂碼)
1、據網上資料,在idea的bin目錄下進行文件編碼修改是不生效的;
在兩個文件末尾加上 -Dfile.encoding=UTF-8(bin目錄下修改不生效,被覆蓋)
原因:
idea的bin目錄下的idea64.exe.vmoptions和idea.exe.vmoptions兩個文件的修改是不會生效的,會被C盤下idea文件中的idea64.exe.vmoptions配置給覆蓋。
而在idea中help - Edit Custom VM Options中的配置文件,是關聯C盤下idea的idea64.exe.vmoptions文件的,所以修改直接生效。
相當於,運行的時候,以C盤下的idea64.exe.vmoption為准,加載這個配置文件(大概是這個道理)。
2、直接在idea中,上方工具欄 - Help - Edit Custom VM Options中,添加 -Dfile.encoding=UTF-8,然后重啟IDEA。
六、Tomcat服務亂碼
tomcat - conf - server.xml
進行如下修改
----------------------------------------------------------------------
======================================
總而言之:
七、出現亂碼問題,綜合解決措施如下:
1、help - Edit Custom VM Options 中添加 -Dfile.encoding=UTF-8;
2、Edit Configuration - VM Option,添加 -Dfile.encoding=UTF-8;
3、修改tomcat - conf - server.xml,指定編碼(方法參考上文);
4、修改logging.properties,指定所有編碼(方法參考上文)。
總而言之,亂碼問題就是各個開發工具中字符集不統一造成的。