最近项目中,我负责的这块程序需要通过WEB获得数据,连接数据库操作,通过接口和同事的程序交换数据。这中间遇到了各种编码方式互相转换的问题。折腾了一天,终于解决了中间编码的问题,有一点体会,记下来免得忘记。
JAVA内部字符串都是通过unicode编码方式存储在内存中的。当调用String.getBytes("字符集")时,将返回 转化成该字符集的字节。而new String(bytes[], "字符集")可以把字节数组的按照指定字符集转换成unicode编码存放在内存中。
比如:程序从网站上拉到的字符串是UTF编码,首先把读取到的字节指定UTF-8存储到内存中。
假设已经读取了一个字节数组buffer,那么:
String str = new String(buffer, "UTF-8");
这时,str在内存存放的是正确的含有中文的字符串。后续要转换成GBK的编码,用
byte[] buffer_gb2312 = str.getBytes("GBK");
可以取得GBK编码方式的字节数组。
这样可以对字符串的编码方式进行转换了。
用SAX处理XML时,只要在XML头部的<?xml version="1.0" encoding="GBK"?>设置encoding为XML内容的编码方式,SAX会进行对应的编码。
PS:今天读取rss时,出现解析XML异常,后来发现在开头有三个多余的字节,影响了解析。在读取rss,跳过这三个字节就正常了。