如今,我们的项目多是UTF8编码。然而,在Windows上运到了若干问题,经过1天时间反复测试调整,解决了,现象和步骤如下:
现象1:控制台乱码
现象2:web页面乱码(websocket发送到前端的汉字)
现象3:log文件乱码
现象4:webService中给对方回复的soap消息中,汉字乱码。
步骤1:在JVM启动参数中增加: -Dfile.encoding=utf-8
步骤2:在MainConfig类中设置常量:
public void configConstant(Constants me) 中
//设置系统字符集
me.setEncoding("UTF-8");
步骤三:log4j.properties里的设置,注意控制台和文件的区别;
log4j.rootLogger=DEBUG, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Encoding=GBK
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
# Output to the File
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.file.File=./log/xxx.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%n%-d{yyyy-MM-dd HH:mm:ss}%n[%p]-[Thread: %t]-[%C.%M()]: %m%n
设置完后,完美解决,希望能帮到大家,乱码的路上不掉坑,少走弯路。
注:在解决控制台乱码过程中,网上搜的解决方案是执行chcp 65001。但由于Windows版本不同,chcp 65001无效或者字符不齐,故弃用。