javascript
【防衰老教程】记录一次IDEA,开发JavaWeb项目时JS中文乱码排错
2019獨角獸企業重金招聘Python工程師標準>>>
最近,在本地啟動公司另外一個項目時,發現項目JS文件居然報錯一大片,這個不能容忍啊,所以立馬著手百起來(以下為坊間流傳方案,雖然部分可以解決,但是總覺得不是很到位,也就是沒有找到點子上去。)
解決過程:在網上也找過很多關于JS亂碼方面的文章,發現都不好使,原因在于每個解決方案肯定是基于當事人所遇到的亂碼問題做出的解決方式,可能不適合于你,后來琢磨到亂碼問題肯定是開發過程中某處編碼沒有統一的問題,那么采用最笨的方式,就是把開發工具的編碼、服務器編碼、項目編碼都統一,問題不就可以解決了,實驗證明確實如此,好了,開始設置:
一、統一服務器編碼
由于這里用的是Tomcat服務器,所以以tomcat為例進行設置,在服務器中有兩處需要設置:
找到tomcat的bin目錄下的catalina.bat并編輯,新增-Dfile.encoding=utf-8
找到tomcat的conf目錄下的server.xml并編輯,修改你項目用到的端口所對應的Connector,比如我這邊用到的是8080端口,那么修改后內容如下:
二、設置開發工具編碼
找到IDEA的安裝文件夾的bin目錄,這里修改的是idea64.exe.vmoptions文件,通過編輯器編輯該文件,在文件內容單獨起最后一行,輸入
-Dfile.encoding=utf-8三、設置全局和項目編碼
打開IntelliJ IDEA,選擇:File->settings->Editor->File Encoding,選擇UTF-8。
四、設置TOMCAT啟動項目時用到的VM option
打開IntelliJ IDEA,選擇:Edit Configurations->Server->VM options: 添加
-Dfile.encoding=utf-8五、設置Startup/Connection,Environment Variables
打開IntelliJ IDEA,選擇:Edit Configurations->Startup/Connection->Run/Debug:
1.勾選pass environment variables;
2.添加參數:JAVA_TOOL_OPTIONS,值為-Dfile.encoding=UTF-8;
六、MAVEN項目編碼設置
找到pom.xml文件中的properties元素,添加如下內容:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>經過以上五處的設置相信可以解決大部分亂碼問題,好了,就這么多!!!
- - - - - - - - - - - - - - - -?- - - - - - - - - - - - - -?-- - - - - - -- - - - - - - -?- - - - - - -- - - - - - - - -
但是,萬萬沒想到,我的問題只解決了一半,日志里開始亂起來了,索性靜下來,自己理了理:
第一,只有當前這一個項目會報錯,其他項目正常;
第二,只有js文件中文會報錯,其他中文均正常;
那么就是除項目外的配置都是沒問題的,好吧,剛剛乘吃飯的功夫,仔細對比了,報錯和沒報錯的web.xml文件中的配置,居然還真有不一樣的地方:
<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><!--本地項目js中文亂碼--><!--<init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>--></filter>咯,就是以上我注釋掉的地方!!!
后面又查了forceEncoding的相關資料
官方解釋:
Servlet 2.3/2.4 Filter that allows one to specify a character encoding for requests.?This is useful because current browsers typically do not set a character encoding even if specified in the HTML page or form.?(這句話就說你在html頁面或表單中設置編碼是沒有用的)
This filter can either apply its encoding if the request does not already specify an encoding,?or enforce this filter's encoding in any case ("forceEncoding"="true").(只要你設置了foreEncoding=true,則在代碼中設置編碼格式沒用,)In the latter case, the encoding will also be applied as default response encoding on Servlet 2.4+ containers (although this will usually be overridden by a full content type set in the view).
?
轉載于:https://my.oschina.net/weijuer/blog/3022177
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的【防衰老教程】记录一次IDEA,开发JavaWeb项目时JS中文乱码排错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数组和矩阵问题:奇数下标都是奇数或者偶数
- 下一篇: 【教程】Edraw Max使用教程:如何