如何将字节数组解码为codePoint

时间:2019-08-15 12:53:33

标签: java character-encoding

Java解码器提供了一种将byte[]解码为chars[]的简便方法,但是众所周知,UTF8字符可以包含多个Java字符。

由于Java中的该API开始使用int codePoint作为替代,但是似乎缺少将字节解码为codePoints的功能。

我的目标是将给定偏移量的字节解码为单个代码点,不创建任何类似 ArrayBuffer之类的中间对象。

有没有有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

是的,Java本身为您提供了该工具。查看类Character,方法public static int codePointAt(char[] a, int index)(及其重载版本),这应该对您有帮助。另外,当我处理与字符集相关的问题时,我发现使用将String转换为Unicode序列的工具非常有用,反之亦然

result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);

此代码的输出是:

\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World

包含该实用程序的库称为MgntUtils,可以在Maven CentralGithub处找到。它作为Maven工件并带有源代码和javadoc。这是类StringUnicodeEncoderDecoder的javadoc。这是描述MgntUtils开源库的文章的链接:Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison