Windows下乱码的解决

如今,我们的项目多是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无效或者字符不齐,故弃用。


评论区

快乐的蹦豆子

2019-08-03 13:45