简单理解老程序员也会搞不清的转码问题乱码问题,不能再简单了

快速开发师 发布于 01/23 15:25
阅读 63
收藏 2

关于字符串转码,从刚学习java到现在开发N年,觉得一直被书和老师坑,说白了还是老师自己也没明白;其实简单得我想吐了!今天终于发现原来简单得如此!

网络上传来一个包含中文字符串,到你的程序里的时候是a变量,当然也可能是数据库查询出来的,你想把它转成GBK字符串,但你怕出现乱码,你该怎么做呢?(注意:a有可能是UTF-8或者是GBK其中之一)

new String(a.getBytes("GBK"),"GBK");

当a是UTF-8编码时,这个转码是正确的

当a是GBK编码时,这个转码也是正确的

为什么两种编码都是正确的,都不会出现乱码,原因在于真正转码发生在a.getBytes("GBK"); 这句才是转码的关键,当a为UTF-8字库时,getBytes("GBK");可以将UTF-8转换成GBK的位置序列,甚至反过来也是可以的如果a是GBK,a.getBytes("UTF-8")也是没毛病的,原因就在于GBK是国际字符编码的“子集”,两者是可以互转的。UTF-8几乎可以和任何字符集互转。所以无论a是什么字符集,都可以作如下转换:new String(a.getBytes(a字符集,“a字符集”);new String(a.getBytes(UTF-8,UTF-8);

但如果你是非UTF-8之间转换,那就必然+一定出现乱码了,比如GBK->法文集,GBK->阿拉伯字符集,那真不叫字符集转换,那他妈叫翻译了,请注意理解翻译。

 

加载中
返回顶部
顶部