之前项目上用到TongWeb,部署项目后出现乱码问题,刚好找到解决方案,作者的文章也失联,刚好整理过相关文档,顺便做个记录,防止失联。
原作者文章地址:https://blog.csdn.net/realwangpu/article/details/109540781
解决乱码问题主要看以下几项配置, 重点要了解这些编码设置所起的作用 :
注:乱码问题看TongWeb
的server.log
日志基本没用,重点是看应用采用的编码以及操作系统、TongWeb
的编码设置。
1.Linux
下先通过local -a
查看操作系统是否有相应的中文字符集。
2.Linux
下再看环境变量LANG
值,通常为zh_CN.GBK
或zh_CN.UTF-8
。通过echo $LANG
查看,通过export LANG=zh_CN.GBK
来设置。
3.JDK参数-Dfile.encoding=GBK
,加在TongWeb
启动脚本中。
以上两项是JDK的默认编码,-Dfile.encoding
优先于LANG
环境变量。
同时还有一参数-Dsun.jnu.encoding=UTF-8
,sun.jnu.encoding
影响文件名的创建,而 file.encoding
则影响到文件内容。在我们使用 Java
处理中文文件的时候,如果发现文件的中文内容没有乱码,而文件的中文名发生乱码,就应当多考虑一下 sun.jnu.encoding
。
4.TongWeb
的Web容器 request
、response
默认编码GBK
。
5.对于URL
的编码,在TongWeb
的 http通道中设置
,默认GBK
。“URL编码格式”相当于tomcat
的URIEncoding
。“uri处理”相当于tomcat
的useBodyEncodingForURI
。
若tomcat
下不乱码,而在TongWeb
下乱码,则可参考tomcat
配置来配置TongWeb
。
useBodyEncodingForURI:This specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding. This setting is present for compatibility with Tomcat 4.1.x, where the encoding specified in the contentType, or explicitly set using Request.setCharacterEncoding method was also used for the parameters from the URL. The default value is false.
6.数据库存入数据乱码,还要看数据本身的编码设置。另外不同数据的JDBC url也有编码设置。
如:MySQL
的jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
。
7.重点查看应用编码规则,一定要了解应用的编码用法。
主要看应用filter中设置的编码:request.setCharacterEncoding("UTF-8")
应用代码中有没有做转码,如: new String(test.getBytes("iso-8859-1"),"utf-8")
;
8.日志乱码主要原因:
(1)telnet
终端编码与日志输出的编码不一致导致,把日志下载到windows
下用Notepad++
等工具查看,并进行UTF-8
与GBK
转码试试。
(2) log4j
编码设置不对,注意参数中的log4j.appender.file.encoding=UTF-8
。
评论 (0)