谜一样的Java编码和Windows编码

本文适用于Java源码用UTF-8编码,平台系统为Windows的情况

不管是maven,还是javac,你的IDE都会带上一个参数:-Dfile.encoding=UTF-8

Windows(或许Windows10以下)的CMD默认活动代码页是GBK,
也就是 936,这样的话,很多工具会显示中文。
如果遇到内部编码是UTF-8的程序,他会乱码,例如rbt.

如果你改成 chcp 65001 也就是UTF-8,那么CMD字体变成点阵字体,就不是之前的那个熟悉的终端了,出奇的难看,输出都变成英文。。

Mysql之类的终端都正常了,能显示中文了。。

如何设置终端默认UTF-8编码

还在用cmd?

现在都流行用cmder.强烈推荐。

启动脚本设置 chcp 65001。开心又愉快。
Win+ALT+P打开设置,Environment > 在窗口中加入

chcp utf-8
set JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"

这样终端环境就是UTF-8了。

java -cp Test.jar com.cortwi.operate.Test

会很正常的显示中文了,如下图1-1

cmder和Java编码
图1-1 cmder设置65001和UTF-8环境 执行Java

注意:

经过测试,CHCP 936的终端,没有JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
的情况下执行JAVA输出的中文是不会乱码的

如果在CHCP 936的终端下,那么不应该设置系统环境变量:JAVA_TOOL_OPTIONS ,应该直接执行:

java -cp Test.jar com.cortwi.operate.Test

又会很开心的输出中文了。

TIPS不改变系统环境:

chcp 936
chcp 65001

若想保留Windows默认设置,就来回切换吧,把以上两个命令常记在心。。。。
使用自带命令就用 936,中文GBK环境。
使用一些UTF-8的跨平台的那种程序遇到了乱码,就执行chcp 65001 将当前终端的活动代码页改为UTF-8,中文就不会乱码,但是命令输出提示可能会变成英文。

经过测试Windows[7] 的svn是需要chcp 936的。如图 1-2所示。
cmder中文
图1-2 cmder的chcp 936环境

65001下会乱码,如图1-3
cmder乱码
图1-3 cmder的chcp 65001环境

 

posted @ 2016-12-01 13:10  一杯半盏  阅读(443)  评论(0编辑  收藏  举报