java - 如何将字节数组解码为 codePoint
问题描述
Java 解码器提供了简单的解码方式byte[]
,chars[]
但众所周知,UTF8 字符可以由多个 java 字符组成。
由于 java 中的 API 开始int codePoint
用作替代品,但似乎缺少将字节解码为 codePoints 的功能。
我的目标是将给定偏移量的字节解码为单个codePoint,而不创建任何中间对象,例如 ArrayBuffer
.
有没有有效的方法来实现这一目标?
解决方案
是的,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 Central或Github上找到它作为 maven 工件提供,并带有源代码和 javadoc。这是StringUnicodeEncoderDecoder类的 javadoc 。这是一篇描述 MgntUtils 开源库的文章的链接:Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison
推荐阅读
- sql - 在第二列值都相同的组中查找非唯一列值的数量
- javascript - 为什么允许使用 kebab-case 非标准属性,而不允许使用其他属性?以及如何在 TypeScript 中定义这样的类型?
- reactjs - 我们如何在 redux 中改变布尔状态
- algorithm - 求所有角都为 1 的二维二进制矩阵中最大矩形的面积
- selenium - 想要检查一个元素是否可以在 selenium 中点击而不等待它
- python - 将关闭按钮捕获为 QMessageBox.Ok
- json - BotFramework Composer 使用 FactSet 显示多个数据
- mysql - 如何在存储过程的json字符串中添加变量?
- python - TodoList 的紧迫性
- linux - 需要帮忙!如何在启用陷阱的情况下构建 Ghostscript?ENABLE_TRAPPING