java字符集问题总结

从事Java开发近10年了,发现有个问题一直如影随形,那就是字符集问题。解析获取过来的中文数据乱码,解析xml文件中的中文乱码等等。真是烦不胜烦。

自己到网上也搜集了一些资料,解决过一些问题,今天将这些已经获取的知识整理一下。

一,   字符集有哪些呢?字符集有很多,分类的话可以从是否支持中文来分,gbk,gb2312,utf-8,utf-16,big5等是支持中文的,但是ascii,iso-8859-1等是不支持中文的。也就是用iso-8859-1编码格式来解析字符串,中文是肯定乱码的。而其他,只要编码和解析用的字符集相同,就没有问题。

二,   现有的系统中的字符集是什么样的?

相信很少有人关心,一个操作系统安装好以后,它支持哪些字符集。实际上中文的操作系统肯定安装了支持中文的字符集的,而纯英文的操作系统也支持中文字符集,因为英文的操作系统一般都支持unicode的编码格式,按照第一条我们知道,unicode字符集是可以用来存储中文的。当然,是要转成unicode编码

三,   Java提供了哪些方法来转换字符集?

Java提供方法包括:

1)      字符串 转换成 字节流,String 的getBytes()和getBytes(String encoding),前者按照操作系统的默认字符集转换,后者按照指定的字符集转换。

2)      字节流转成成字符串 String 的构造函数提供了方法,如new String(byte[] bytes)或者new String(byte[] bytes, String endcoding),前者按照操作系统默认的字符集转成String,后者按照指定的字符集。

3)      IO类中,分为两种,字节方式传输的InputStream,OutputStream和按照字符方式传输的Reader和Writer。这两类IO类,字节方式传输如果都不读取实际可以不用关心。Reader和Writer实际需要关心,否则读取或者写入的是乱码,就不对了。这里面涉及的方法包括:InputStreamReader(Reader reader, String encoding)等不一一列举。

四,   读取XML文件乱码是为什么?

程序中读取XML文件乱码,根本原因在于读取时设定的编码格式不支持中文,需要制定支持中文的编码格式。当然,如果输入流是InputSource,而流中的信息是字符形式的,需要保证传进来的字符流就是正确编码的,因为SAX解析器对字符流是不进行编码转换的。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: