对于开发人员来说windows的编码的确是神一般的存在,windows老版本语言编码实际上是ascii和gbk编码混用,因此经常乱码。现在UTF-8国际化流行的阶段,windows这么多年,不知道耽误了多少程序员 :),老朱是linux服务器,数据库服务器,web服务器,程序代码都已经改成UTF-8编码了,因此很少出现乱码的情况。
好在现在Windows 10 虽然是beta版,还是可以修改的。按照下面的步骤修改就可以了。
首先是在 控制面板 --->> 时间和语言--->语言--->管理语言设置
然后 “管理”选项卡 --->更改系统区域设置 --->选择 beta版前面的对勾--->确认重启电脑。
切换后 ,按win+r 键,输入cmd 回车,输入chcp 会发现编码会变成了 65001
对于php程序,能兼容,因为php是二进制读写和输出文件。 如果java程序是utf-8格式,文件编码utf-8,在命令行下执行还是会乱码 ,比如下面的程序。
public class Test {
public static void main(String[] args) {
System.out.println("简体中文" );
}
}
通过执行下面的代码,java使用的编码还是GBK
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
class Test {
public static void main(String[] args) {
System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("Default Charset in Use=" + getDefaultCharSet());
}
private static String getDefaultCharSet() {
OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream());
String enc = writer.getEncoding();
return enc;
}
}
Java官方文档有提到可以在系统变量中设置JAVA_TOOL_OPTIONS来指定运行Java程序时附带的一些参数,即每次运行Java程序时都会将这些参数附加进去,参考原文:
http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html#tooloptions
那么,现在就可以在系统环境变量中增加一个变量,变量名为: JAVA_TOOL_OPTIONS, 变量值为:-Dfile.encoding=UTF-8,保存,重新打开命令提示符,现在,再运行一次刚刚的程序,得到结果:
这时候 运行 java的程序 也正常了。但是对于UTF-8的文件javac编译的时候,直接输入类名,会提示 “错误: 仅当显式请求注释处理时才接受类名称 'Test'” ,需要增加.java后缀名 javac Test.java
另外 测试了一下各种应用软件,svn和git编码也正常。
不过有一个问题就是切换到UTF-8后,以前GBK编码的文件,无法正常显示,而且无法用记事本转码。
也不能用记事本将文件保存为ascii码。
建议还是用非常小巧的Editplus 这个软件吧。 Editplus 非常好用。 建议将editplus 设置为默认的UTF-8编码。
在editPlus选择 工具-->参数设置,编码选择UTF-8
如果遇到其他的文件,打开文件的时候,选择编码为GBK,如果没有GBK编码
如果默认没有GBK 编码,在点下拉菜单,可以增加GBK编码。
自此,老朱把系统编码改成UTF-8后,使用完全正常。几乎所有的编码统一为UTF-8后,也几乎没有遇到乱码的问题。