字符集猛于虎

字符集猛于虎,这是最近感觉到的一个十分严肃的问题。作为一名java程序员,我们不得不与各种序列化方法打交道,当然这其中最最普遍的就是StringgetBytes方法,这个方法能够唤醒的就是JVM字符集的可怕魔法效果。


JVM内部所有的数据都是UTF-8的方式编码,这不会出现问题,但是在JVM核心之外却充斥着各种各样的东西。一个文本可以有着不同的编码,UTF-8的鱼GBK在一台中文windows操作系统的机器上是看不出什么不同的,当然分隔符是不一样的。如果你把这个文本序列化试图读取每一行的内容,那么字符集问题便开始作怪了。


如果你使用GB2313的作为默认操作系统字符集,那么我要很郑重的告诉你,GB2312不是GBK。当你试图调用一个String对象的getBytes方法的时候,如果没有参数他是序列化为GB2312编码的比特数组。当然如果你非要用getBytes(“GBK”)方法,那么你得到的这个比特数组很可能会给你带来很多奇怪的麻烦。


记住字符集转换的时候你只能从小的向大的转,千万别试图从大的向小的转,那样你会得到一个外星人能读懂的东西。GB2312就是比GBK小的字符集,所以你可以将一个GB2312的字符串转换成一个GBK编码的字符串,反过来你就要去读天书。当然天书的最简单情况是一堆的?,还会存在比某些岛国或者被我华夏文明熏染的某半岛国家文字还要难以理解的东西。


如果可能的话请从页面开始全部使用UTF-8编码,文件的大小要比GBK的大一些,但是你会省去很多的麻烦。我已经被这些麻烦淹没,现在我能做的就是尽最大的努力把这些玩意变得可以理解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值