调试代码时,发现log.debug信息中的中文都变成了乱码,进一步观察发现,System.out.println
中输出的中文又是正常的!
因为Eclipse的控制台必须设置为GBK编码,才能使运行后产生的结果不会乱码。
所以条件1和条件4必须同时满足否则运行的还是乱码。才能保证不是乱码。
- 条件1,Window | Preferences | Workspace | Text file encoding | GBK编码。
这样定义的是整个工作区间的编码。
这样就把整个工作空间的编码格式定死了,但是如果某一个工程用的是不同的编码格式的话这样单独再解决。如下:
- 条件2,工程上 右键 | Properties | Resource | Text file encoding | UTF-8编码。或者适合的编码格式。这样定义的是整个工程的编码。
这样就把整个工程的编码格式定死了,但是如果某一个文件用的是不同的编码格式的话这样单独再解决。如下:
- 条件3,在某个文件上 右键| Properties | Resource | Text file encoding | UTF-8编码。或者适合的编码格式。这样定义的是单独某个文件的编码。
这里要说的是文件的实际编码格式优先用的是:
第3个,其次再用2,最后先用1。有时候是123,必须满足条件。
无论怎样这几种编码格式试一试就全知道了。
- 条件4,还有运行时编码设置如下:菜单:Run Configuration | 右侧的选项卡Common 的Console Encoding 选择GBK编码。
这样保证了工作空间和工程代码编程方式和工程里的单独文件的编码格式的不冲突。
某一天,我们想改变别人的代码的编码格式的话用如下方法:
- 用记事本打开,
- 改变下面的编码格式如UTF-8,
- 另存为xxx.java。这样另存的编码格式就变成自己想要的编码格式了
先上结论(此乱码原因):log日志配置编码和运行时编码不一致造成的。两者只要一致,就不会出现乱码,不管设置UTF-8还是GBK;(具体做法见下面总结)
总结下eclipse中编码设置:
- 工作区间:工具栏 Window–>Preferences–>General–>Workspace–>Text file encoding–>选编码;
- 工程:工程右键,Properties–>Resource–>Text file encoding–>选编码
- 某文件:文件右键,Properties–>Resource–>Text file encoding–>选编码
【1】上面3个,是相互影响的,一般优先起作用的顺序是3-2-1;即虽然工程编码是GBK,也可以单独设置某文件编码是UTF-8;
【2】文件的编码,就跟System.out.println
语句输出的中文格式有关系了。
值得注意的是,eclipse文件中含有中文时,直接修改编码会导致文件中中文直接变成乱码,输出自然也就是乱码了,且编码并没有提供GBK格式。另外,即便你先选择了如ISO-8859-1这样的格式,再编辑中文的话,也是无法正常保存的,倒是提供了一个save as UTF-8的选项。
- 日志配置文件编码设置:(charset 设置的编码格式要与下面运行时编码设置一致)
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
5、运行时编码:main方法类中右键
Run as -->Run Configuration-->Common --> Console Encoding-->Others-->选择或者手动输入一个编码格式
;
假如你4中log文件设置的是GBK,那么在这里也只能选GBK才不会出现乱码。
选择执行的编码集格式
6、在Run-Run Configration-Tomcat-Arguments,在VM arguments中添加-Dfile.encoding=UTF-8
,如下图