扫除程序员的字符集编码障碍困惑

先介绍两个概念:

,它是二进制的表达,看不到,摸不着,程序与程序之间相互交互的媒介,数据保存的媒介。

可视字体,它是人眼中的汉字、字母等等的表示。 可视字体是我的发明的一种叫法,已经与字符集(编码方式)无关了。看一下String的源码,里面根本没有charset,String就是一个可视字体。

 

什么时候会发生编码问题呢?

  • 系统与系统的交互(网络请求)
  • 人与文件的交互 (看日志)

A系统请求B系统的时候,它们的字符集不一样。比如GBK 访问 UTF-8,这个时候,我们需要知道对面过来的字符集是什么。通过获取请求头中的参数 content-type:application/json;charset=gbk 系统自动就会识别,并且将流数据,按照gbk的格式反序列化成String,即可视字体。B系统中的这个String可以输出到控制台,日志中都不会乱码。我们需要做的事就是在头信息中告诉对方就行了,剩下的事java已经帮我们搞定了。

 

我们为什么还会被编码问题纠结呢?

shell客户端窗口看日志,因为日志是文件,保存形式是流,是二进制。人通过shell客户端看日志,shell客户端需要解读文件。需要考虑怎样处理这些流数据,转化成可视字体,才能被我们看见。如果这个文件的保存时的编码格式是gbk,我们在解读的时候,要选择为gbk,就可以看见了。

 

String这个变量,

System.out.print(str) 输出到控制台,控制台按照默认编码去解读,我们看见了。

log.info(str)输出到日志,shell客户端按照指定的编码方式去解读,我们也看见了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值