在处理字符串时,经常需要进行编码转换,获得正确的结果,例如,将字符串S从ISO-8859-1的编码转换为GBK编码。

常用的方法是利用String类的构造方法来实现
String result = new String(s.getBytes("ISO-8859-1"), "GBK");

JDK 1.4.2新增的NIO包中,提供了Charset类,也可以用来进行编码转换。用到的方法如下:
public final CharBuffer decode(ByteBuffer bb)
文档说明为:Convenience method that decodes bytes in this charset into Unicode characters.

需要注意的是,decode接收的类型为ByteBuffer,返回的类型为CharBuffer,在调用decode方法操作String对象时,需要进行类型转换。
String result = Charset.forName("GBK").decode(ByteBuffer.wrap(s.getBytes("ISO-8859-1"))).toString();

测试表明,相比传统的方法,利用Charset进行编码转换,可以节省1/3的时间。


1条评论

  1. 字符串内码的转换,是开发中经常遇到的问题。

    在Java中,我们可以先对某个String调用getByte(),由结果生成新String的办法来转码,也可以用NIO包里面的Charset来实现。

    在Python中,可以对String调用decode和encode方法来实现转码。

    比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作

    s.decode(‘gbk’).encode(‘utf-8′)

发表评论

评论也有版权!