Charset.defaultCharset() 获取的语言环境的编码到底是哪里来的 ?
写个单元测试验证下:
public class Test {
public static void main(String args[]){
System.out.println(Charset.defaultCharset());
}
}
执行结果是GBK:
立马懵逼了。对不起前任公司啊,可能给你写错了一行代码(这里是可能,到我离职也没有问题啊)。文章的最后我解释一下
问了一下度娘:是eclipse默认编码的问题;修改既可以。
但是这就是问题了:线上是放在tomcat中的。没有eclipse。你说Charset.defaultCharset() 读取是哪里的语言环境的编码呢?
补充:tomcat没有默认语言编码。可以设置conf/server.xml文件中Connector 标签;设置<Connector URIEncoding="utf-8" />;
再问度娘:
可以修改环境变量:
变量名:JAVA_TOOL_OPTIONS变量值:-Dfile.encoding=UTF-8
执行单元测试
貌似可以结贴了:
Charset.defaultCharset()默认读取还是配置的语言编码;也是就是系统的;
我以前的代码没有暴露出来的错误,可能是我们的运维小哥给系统设置的语言环境是UTF-8;
以上都不是重点:我想说的是:关注在系统和系统之间交互的时候,要注意语言编码;正确选择合适的代码。
引申:以上都不是重点:下篇博客我会介绍加解密的一些简单知识。