Java UTF-8至代码点

Java UTF-8至代码点,java,unicode,Java,Unicode,我需要实现如下方法: int-toCodePointbyte[]buf,int-startIndex; 它应该将字节数组中的UTF-8字符解码为代码点。不应该创建额外的对象,这就是我不使用JDK字符串类进行解码的原因。 是否有任何现有的java类可以执行此操作? 多谢各位 您可以使用。你需要一个缓冲垫和一个缓冲垫。将数据放入ByteBuffer,然后使用CharsetDecoder.DecodeBytBuffer in、CharBuffer out、boolean endOfInput读入Cha

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

您可以使用。你需要一个缓冲垫和一个缓冲垫。将数据放入ByteBuffer,然后使用CharsetDecoder.DecodeBytBuffer in、CharBuffer out、boolean endOfInput读入CharBuffer。然后可以使用Character.codePointAtchar[]a,int索引获取代码点。使用此方法很重要,因为如果文本中的字符在BMP之外,它们将被转换为两个字符,因此仅读取一个字符是不够的

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

您可以使用此方法。你需要一个缓冲垫和一个缓冲垫。将数据放入ByteBuffer,然后使用CharsetDecoder.DecodeBytBuffer in、CharBuffer out、boolean endOfInput读入CharBuffer。然后可以使用Character.codePointAtchar[]a,int索引获取代码点。使用此方法很重要,因为如果文本中的字符在BMP之外,它们将被转换为两个字符,因此仅读取一个字符是不够的


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

我知道的所有现有Java类都不适合此任务,因为您有限制,不应创建额外的对象。否则,您可以使用Malcolm提到的。若你们真的需要纯静态的方法,甚至可以到黑暗面来使用。但这不是推荐的方法。

我知道的所有现有Java类都不适合此任务,因为您有限制,不应创建额外的对象。否则,您可以使用Malcolm提到的。若你们真的需要纯静态的方法,甚至可以到黑暗面来使用。但这不是推荐的方法。

在Java中,字符是UTF-16代码单元,因此对于某些代码点,此方法不会给出正确的代码点值。@bames53作为澄清,此方法不确切给出代码点,它将UTF-8字节转换为字符。如果它遇到BMP之外的代码点,它将被转换为两个字符。我已经更新了一点答案,以明确你应该如何阅读结果。谢谢。实际上,我想知道下面给出的算法是否适合我@用户1192878当然,你可以使用它。与标准库相比,它不太可靠,因为后者已经过测试,但绝对可行。在Java中,char是一个UTF-16代码单元,因此对于某些代码点,此方法不会给出正确的代码点值。@bames53作为澄清事项,此方法不确切地给出代码点,它将UTF-8字节转换为字符。如果它遇到BMP之外的代码点,它将被转换为两个字符。我已经更新了一点答案,以明确你应该如何阅读结果。谢谢。实际上,我想知道下面给出的算法是否适合我@用户1192878当然,你可以使用它。与标准库相比,它不太可靠,因为后者已经过测试,但绝对可行。