首页 > 解决方案 > 如何将字节数组解码为 codePoint

问题描述

Java 解码器提供了简单的解码方式byte[]chars[]但众所周知,UTF8 字符可以由多个 java 字符组成。

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

我的目标是将给定偏移量的字节解码为单个codePoint,而不创建任何中间对象,例如 ArrayBuffer.

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

标签: javacharacter-encoding

解决方案


是的,Java 本身为您提供了该工具。查看 class Character, method 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 CentralGithub上找到它作为 maven 工件提供,并带有源代码和 javadoc。这是StringUnicodeEncoderDecoder类的 javadoc 。这是一篇描述 MgntUtils 开源库的文章的链接:Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison


推荐阅读