freemaker.charset与project\file-encoding编码问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HappinessSourceL/article/details/82854499

1、问题背景:
接手新项目,项目框架为spring-boot+freemaker,Gradle管理

2、部署过程

观察到application.properties文件中有该设置

spring.freemaker.charset =  GBK

因此认为项目编码为GBK

使用Gradle导入,没有更改任何Eclipse的编码配置

(PS:使用Intelli 导入eclipse项目 不能自动下载jar包,因此还是用eclipse比较方便)

3、问题出现:

Web页面上中文 部分正常显示,部分乱码,一般是从服务器后台传值给freeemaker html的值为乱码。chrome上的charset扩展程序显示页面编码为GBK。

查看乱码来源的.java文件发现在IDE中也显示为乱码,右键单击文件properties->Text file encoding ->取消default(GBK),选择other(UTF-8),IDE中程序文件中的中文显示恢复正常。重新Run,Web页面仍然显示乱码。

这是必然的,程序文件采用UTF-8编码,可是解析出来的前端模板采用GBK,两者不一致,肯定是乱码。

4、问题解决:
从workspace中删除项目,设置Window->Preferences->Content Types->Text->Java Source File->Default encoding 填入UTF-8,这样保证编译环节.java中的中文能正确解析

WorkSpace中的Text file encoding仍然保留为默认的GBK,这个默认GBK不会影响上一步中设置的JavaSourceFile的text file encoing 为UTF-8,还能保证freemaker生成的GBK hmtl文件能正确解析。如果这个也设置成了UTF-8,那么在单个文件的个性化text file encoding设置那里other 中会没有GBK的选项,只有UTF-8等其他非eclipse默认的编码类型。

值得注意的是,request请求仍是utf-8的

 res.setHeader("content-type", "application/octet-stream;charset=UTF-8");

每个文件可以通过properties设置单独的编码格式。

5、总结

spring.freemaker.charset=GBK 设置的是页面渲染模板文件的编码类型,其实官网上都建议设置成为UTF-8,反正最好与Java Source File的text file encoding 保持一致,这样才能避免在项目导入IDE时对不同类型文件的多重编码格式设置。比如这次我因为同事之前设置了GBK和UTF-8 两种格式的原因,就要在接手项目的时候针对templates html文件 和java source file文件设置两种不同的编码格式,不设置的话,IDE采用默认的统一编码GBK在IDE中展示项目文件,.java中的中文是乱码,这样不仅开发人员看不懂,也导致Web页面乱码。如果我将项目文件都设置成UTF-8,那么只有.html文件在IDE中展示中文乱码,Web页面仍是正常的,因为freemaker的charset是GBK,生成的html是GBK,解析的时候也是GBK

猜你喜欢

转载自blog.csdn.net/HappinessSourceL/article/details/82854499