Java解码器提供了一种将byte[]
解码为chars[]
的简便方法,但是众所周知,UTF8字符可以包含多个Java字符。
由于Java中的该API开始使用int codePoint
作为替代,但是似乎缺少将字节解码为codePoints的功能。
我的目标是将给定偏移量的字节解码为单个代码点,不创建任何类似 ArrayBuffer
之类的中间对象。
有没有有效的方法来实现这一目标?
答案 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 Central或Github处找到。它作为Maven工件并带有源代码和javadoc。这是类StringUnicodeEncoderDecoder的javadoc。这是描述MgntUtils开源库的文章的链接:Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison