Charset.defaultCharset() 获取的语言环境的编码到底是哪里来的 ?

单元测试发现Charset.defaultCharset()返回的结果出乎意料,这引发了一个问题:在没有Eclipse的线上Tomcat环境中,该方法读取的是哪个语言环境的编码?通过设置Tomcat Connector和环境变量JAVA_TOOL_OPTIONS,可以影响其默认编码。关键在于理解系统和系统间交互时语言编码的重要性,避免潜在的编码错误。后续博客将讨论加解密基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;


以上都不是重点:我想说的是:关注在系统和系统之间交互的时候,要注意语言编码;正确选择合适的代码。


引申:以上都不是重点:下篇博客我会介绍加解密的一些简单知识。



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值