之前在改系统编码的时候,遇到了一些问题,记录下来,以供后面查看
批量转换文件(只转换文本文件,不要转换二进制文件)
1,使用 GB2UTF V1.3,带BOM不要勾选,勾选的话,会使你的页面加入空格等。
2,转换如下的文件后缀 *.htm|*.html|*.vm|*.js|*.txt|*.java|*.css|*.xml|*.properties。
3,如果项目中有UTF-8和GBK编码混用的,UTF-8的不要加入到转换列表中,如果中文的UTF-8转换之后,会变成乱码。(可以先转换文件,如果查看,如果是乱码的话,再还原回来)
修改项目中的配置(全部搜索)
1,修改项目中的GBK,GB2312为UTF-8(包括页面中编码属性,配置文件中的GBK 等等)
2,修改本地idea的配置:修改 File Encoding的 IDE Encoding和Default encoding for properties files 为UTF-8
本地启动测试
发现的问题:1,jquery 的validate框架的提示中文乱码,经检查,发现引用UED那边的js的时候,没有加上charset 属性。(charset属性配置的是外部文件的编码,线上的js,css有的是UTF-8, 有的是GB2312)
修改系统编码,将系统编码改为UTF-8的中文环境(此步骤由运维操作,大概了解即可)
1, 修改/etc/profile,如果有下面两句的请去除(运维说线上的没有这个配置),测试环境的请修改当前用户的环境变量(~/.bash_profile, 此处 感谢志哥,松然的提醒)。
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"
2, 修改 /etc/sysconfig/i18n中的编码配置
3, LANG="zh_CN.UTF-8" zh_CN 代表中文环境 UTF-8代表编码
修改自动部署中的环境变量脚本
发现在自动部署中的 env.sh 脚本中有指定 LANG = GBK,所以需要检查(不一定都在env.sh中,请注意检查, 启动前和启动后的脚本都需要检查)
修改JAVA_OPTS中的环境变量
-Dfile.encoding=GBK 此参数经测试会影响tomcat的编码,44测试环境发现有这个问题,然后线上不知道有没有这个参数。
修改请求的编码
1, 修改Tomcat的get请求编码,将server.xml文件的中的 URIEncoding参数修改为utf-8。
2, 修改struts.xml文件中的 struts.i18n.encoding参数。经测试,此参数决定了struts采用什么编码来解析,请求的参数。(此处的修改请慎重,如果http请求的接口有中文参数的话,对方应用没有改成UTF-8,自己的配置改成UTF-8,可能引起乱码问题)
指定Md5和Base64的编码(虚拟订单轨迹消息网关遇到的问题)
问题:成都那边切换系统编码,上线之后订单轨迹消息出现乱码。
原因: 字符串和字节数组转换的时候,没有指定编码,使用了应用编码。
解决方法: 使用_charset_参数,让成都那边的系统将系统编码传入,使用传入的编码进行字符串和byte数组的转换,如果没有传入,使用默认的GBK。
Md5采用字节数组的加密方式MD5Util.md5Hex((parameterString).getBytes(charSet)),将 publicstatic String md5Hex(String data) 方法换成 public staticString md5Hex(byte[] data)。
BASE64Decoder, 解码出来的是一个byte数组,在转换成字符串的时候需要指定编码,public String(byte bytes[], String charsetName)。
Ajax 请求的乱码问题(待验证)