Java 解码器提供了简单的方法将 byte[]
解码为 chars[]
,但众所周知,UTF8 字符可以由多个 java 字符组成。
因为java中的API开始使用int codePoint
作为替代品,但似乎缺少将字节解码为codePoints的功能。
我的目标是将给定偏移量处的字节解码为单个 codePoint,不创建任何中间对象,例如 ArrayBuffer
。
有什么有效的方法可以实现这一点吗?
最佳答案
是的,Java 本身就为您提供了该工具。查看类 Character
,方法 public static int codePointAt(char[] a, int index) (及其重载版本)这应该对您有帮助。另外,当我处理与字符集相关的问题时,我发现使用将字符串转换为 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
关于java - 如何将字节数组解码为codePoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57509967/