IDEA使用Tomcat伺服器出現亂碼問題排查過程

阿飛雲發表於2019-05-13

做一個積極的人

編碼、改bug、提升自己

我有一個樂園,面向程式設計,春暖花開!

最近剛使用IDEA,在開發一個功能的時候,開始使用Jetty作為容器進行web專案開發,測試通過。然後想了一下線上伺服器使用的容器是Tomcat,還是用Tomcat跑一下專案在測試一下,本地和伺服器使用相同的容器,這個可以避免因為容器不同而導致本地測試通過,而上線又出現莫名的錯誤~! 就在我從Jetty切換到Tomcat,就發生了問題,訪問JSP頁面使用response輸出,出現了亂碼!!!

就是下面這些東東:(這是什麼啊!萌幣中。。。。。

 ����⣺ ����⣺ ����⣺ ����⣺ ����⣺ ����⣺ ����⣺
複製程式碼

這裡寫圖片描述

這很是鬱悶,本想著一次性測試通過,沒想到這裡又讓我停留! 看到亂碼,心裡不要害怕,不要緊張!冷靜下來進行分析,看哪裡出現問題!

開始思考:

0:資料庫(mysql)---utf-8

show variables like 'character%'

character_set_client	utf8
character_set_connection	utf8
character_set_database	utf8
character_set_filesystem	binary
character_set_results	utf8
character_set_server	utf8
character_set_system	utf8
character_sets_dir	/aebiz/soft/mysql/share/charsets/
複製程式碼

1:Tomcat---utf-8

<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443"/>
複製程式碼

2:jsp --- utf-8

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
複製程式碼

3:web.xml---utf-8

<filter>
    <filter-name>CharacterEncodingFilter</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>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
複製程式碼

4:request和response

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
複製程式碼

5:java程式碼字串編碼

str = tmpWriter.getByteArrayOutputStream().toString("utf-8");
複製程式碼

全部都檢查過之後,發現全部是utf-8。大寫的一個懵字,全部是utf-8怎麼還是會有亂碼出現呢?

好憂傷,難道是還有什麼地方沒有設定嗎,我一想,是不是IDEA結合Tomcat編碼設定有問題導致的呢?按照這個思路發現奇蹟就在前面!

在配置Tomcat的時候新增一些引數。如下(開始是沒有設定-Dfile.encoding=UTF-8)

-server
-Xms1024m
-Xmx2048m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:+CMSClassUnloadingEnabled
-XX:+PrintGCDetails
-Xloggc:%M2_HOME%/gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=%M2_HOME%/java_pid.hproyuan
複製程式碼

用搜尋引擎發現下面博文:Eclipse、IDEA環境下設定jvm預設編碼

於是新增VM引數新增

-Dfile.encoding=UTF-8

配置引數就是

-server
-Xms1024m
-Xmx2048m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:+CMSClassUnloadingEnabled
-XX:+PrintGCDetails
-Xloggc:%M2_HOME%/gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=%M2_HOME%/java_pid.hproyuan
-Dfile.encoding=UTF-8
複製程式碼

啟動發現頁面亂碼不見了,可是控制檯有出現了亂碼,亂碼真是 生生不息 啊!

這裡寫圖片描述

於是配置idea安裝目錄下的bin資料夾,idea.exe.vmoptions檔案中

新增一條配置資訊:-Dfile.encoding=UTF-8

這裡寫圖片描述

so,一切都解決了!完美!


謝謝你的閱讀,如果您覺得這篇博文對你有幫助,請點贊或者喜歡,讓更多的人看到!祝你每天開心愉快!



不管做什麼,只要堅持下去就會看到不一樣!在路上,不卑不亢!

願你我在人生的路上能都變成最好的自己,能夠成為一個獨擋一面的人

IDEA使用Tomcat伺服器出現亂碼問題排查過程

© 每天都在變得更好的阿飛雲

相關文章