UTF-8到代码点

时间:2012-02-14 09:27:17

标签: java unicode

我需要实现这样的方法: int toCodePoint(byte [] buf,int startIndex); 它应该将字节数组中的UTF-8字符解码为代码点。不应该创建额外的对象(这就是我不使用JDK String类进行解码的原因)。 是否有任何现有的java类来执行此操作? 谢谢。

2 个答案:

答案 0 :(得分:4)

您可以使用java.nio.charset.CharsetDecoder来执行此操作。您需要ByteBufferCharBuffer。将数据放入ByteBuffer,然后使用CharsetDecoder.decode(ByteBuffer in, CharBuffer out, boolean endOfInput)读取CharBuffer。然后,您可以使用Character.codePointAt(char[] a, int index)获取代码点。使用此方法很重要,因为如果您的文本在BMP之外有字符,它们将被翻译成两个字符,因此仅读取一个字符是不够的。

使用此方法,您只需创建两个缓冲区,之后不会创建新对象,除非发生某些错误。

答案 1 :(得分:0)

我所知道的所有现有Java类都不适合此任务,因为您有限制(“不应创建额外的对象”)。否则你可以使用CharsetDecoder(如Malcolm所述)。如果你真的需要纯静态方法,甚至可以使用sun.io.ByteToCharUTF8。但不建议这样做。