从事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解析器对字符流是不进行编码转换的。