【防衰老教程】记录一次IDEA,开发JavaWeb项目时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

三、设置全局和项目编码

cc39fcb7e6dda576f59107e662457102277.jpg

打开IntelliJ IDEA,选择:File->settings->Editor->File Encoding,选择UTF-8。

四、设置TOMCAT启动项目时用到的VM option

7a5be81a563c0514f00ea17ff427a7eaa44.jpg

打开IntelliJ IDEA,选择:Edit Configurations->Server->VM options: 添加

-Dfile.encoding=utf-8

五、设置Startup/Connection,Environment Variables

d239913a8562e8cf22a69e6a8eaad685c4d.jpg

打开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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值