大家經常遇到亂碼問題,我一般習慣性的把編碼問題歸結為兩種:
編碼層面的亂碼:指的是那些需要修改項目內的代碼或配置來解決的亂碼問題,比如有的時候從數據庫獲取的數據是亂碼、發送ajax請求時,獲取到的數據亂碼等,這種都需要進行新增或修改適當代碼或配置來解決;
非編碼層面的亂碼:指的是那些修改項目外在的一些東西,比如服務器編碼沒有設置、開發環境中沒有設置編碼、開發工具編碼問題等原因造就的亂碼;
只要是出現了亂碼,從上面兩個角度采用排除法,一般亂碼問題都會得到解決;首先判斷是否是非編碼層面的亂碼,如果不是在進行編碼層面亂碼的解決,此處暫不涉及編碼層面的亂碼。非編碼層面的亂碼解決思路大同小異,在這里拋磚引玉,給大家的思路!
異常現象:昨天在導入一份商城代碼時,遇到了一個問題:頁面內容能正常顯示,但是凡是通過JS實現動態顯示、渲染的內容都呈現亂碼,如下所示,可以發現在下面大部分內容可以正常顯示,但是有些地方呈現亂碼:
分析問題:既然會出現這些問題,肯定有共同點,通過查看對應頁面的文件發現以上所有亂碼處的內容只存在於JS中,且是JS中的靜態內容,其余通過JS渲染的動態內容沒有亂碼問題,所以應該屬於JS亂碼問題;
解決過程:在網上也找過很多關於JS亂碼方面的文章,發現都不好使,原因在於每個解決方案肯定是基於當事人所遇到的亂碼問題做出的解決方式,可能不適合於你,后來琢磨到亂碼問題肯定是開發過程中某處編碼沒有統一的問題,那么采用最笨的方式,就是把開發工具的編碼、服務器編碼、項目編碼都統一,問題不就可以解決了,實驗證明確實如此,好了,開始設置:
一、統一服務器編碼,由於這里用的是Tomcat服務器,所以以tomcat為例進行設置,在服務器中有兩處需要設置:
找到tomcat的bin目錄下的catalina.bat並編輯,新增-Dfile.encoding=utf-8
找到tomcat的conf目錄下的server.xml並編輯,修改你項目用到的端口所對應的Connector,比如我這邊用到的是8080端口,那么修改后內容如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8" />
二、設置開發工具編碼,找到IDEA的安裝文件夾的bin目錄,如下所示:
我這里修改的是idea64.exe.vmoptions文件,通過編輯器編輯該文件,在文件內容單獨起最后一行,輸入
-Dfile.encoding=utf-8
三、設置全局和項目編碼,如下圖所示,圖中標有數字的地方都需要設置:
四、設置TOMCAT啟動項目時用到的VM option,如下圖所示:
五、MAVEN項目編碼設置,找到pom.xml文件中的properties元素,添加如下內容:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
經過以上五處的設置相信可以解決大部分亂碼問題,好了,就這么多!!