java导出文件乱码

**问题背景**:javaWeb项目导出文件名乱码。本地window7调试项目导出文件名正常,线上linux(centos7)环境导出文化名乱码。

依据百度经验做尝试:

**1)**使用String newStr = new String("中文".getByte("字符类型1"),"字符类型2")并没有起到任何积极作用;后来得知,此方法的用途是这样的:java程序获取到一个字符串(各种可能的途径获取),发现此字符串是乱码的(可以直接控制台打出来或者debug看),然后可以用这个new String方法将乱码的字符串转为正常中文(前提是你要知道乱码字符串的编码方式,然后用newStr = new String(乱码字符串.getBytes(乱码字符串的编码字符集),java项目字符集),这个newStr就是正常显示的中文字符串。)所以我认为这个方法不能解决我的问题,因为我其中一个linux的系统字符集就是utf-8(en_US.UTF-8),而我的项目是utf-8的

**2)**使用URLEncode("xxx","")与URLDecode("xxx","")并没有起到任何积极作用;后来得知,此方法用于url交互,为了防止url中的中文信息乱码倒置信息丢失或错误,encode与decode要成对使用的,前端可以先encode用字符集c1编码,然后后端对应用decode用c1编码,当然前后端传输只是一个案例,此方法应当可以作为防止传输造成乱码的一种策略。所以我认为乱码问题是不能用encode与decode这两个方法解决的。

**3)**修改linux系统的字符集。

查百度知,最有可能是linux系统默认编码不是"UTF-8"导致的,使用locale命令查询linux默认字符集,发现不是"zh_CN.UTF-8"(大家注意zh_CN.UTF-8与en_US.UTF-8的差别,en_US.UTF-8我这里不行的)

第一种修改方式:

在tomcat的catalina.sh中加入export LC_ALL="zh_CN.UTF-8",然后重启tomcat服务器,竟然问题直接就解决了,中文名不乱码了。后来得知,这句话的作用是 将tomcat运行的linux系统环境编码临时修改为目标编码,其实这样就是妥妥得解决问题了,而且不用去改linux服务器本身得字符配置,这个配置只对tomcat有效而已。并不会影响到系统中其他应用。

第二种修改方式:

直接修改linux系统得默认字符集,即修改locale配置。配置的最终结果应当是这样的,locale命令列出来的变量,除了LC_ALL可以为空,其他都需要是"zh_CN.UTF-8"。如何配置查百度应该可以,我会再写一篇关于locale配置的经验。

完(Aronc 20210327)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容