java - Unicode 代码点数组转换为字符串并返回更改
问题描述
具有定义的 Unicode 代码点的数组是:
int[] unicodeDefinedCodePoints = IntStream
.rangeClosed(Character.MIN_CODE_POINT, Character.MAX_CODE_POINT)
.filter(Character::isDefined)
.toArray();
让我们将其转换为字符串并返回代码点:
int[] unicodeDefinedCodePointsAfterTransformation =
new String(unicodeDefinedCodePoints, 0, unicodeDefinedCodePoints.length)
.codePoints()
.toArray();
我希望得到相同的数组,但是
- 转换后的数组不包含代码点 56319 和 56320
- 代码点 1113088 在转换后被复制
上述代码点的代码是十进制的。
使用的Java版本是:
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (IcedTea 3.17.1) (build 1.8.0_275-b01 suse-1.1-x86_64)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
有任何想法吗?
谢谢。
解决方案
没有明确的答案
- 56319 是 U+DBFF,私有高代理,最后。
- 56320 是 U+DC00,低代理,第一。
- 1113088 isU+10FC00,无效字符。
可能是先处理高代理,然后处理低代理。无效字符当然是单例黑洞;失败时的替换字符。
对于代理对,只需递减,或用一个代码点制作两个字符串。
int[] unicodeDefinedCodePoints = IntStream
.rangeClosed(-Character.MAX_CODE_POINT, -Character.MIN_CODE_POINT)
.map(Math::abs)
.filter(Character::isValidCodePoint)
.toArray();
我认为 isDefined 和 isValidCodePoint 之间没有区别,但后者更清楚。
推荐阅读
- javascript - v-calendar 问题,如何根据对象数组列表中的日期禁用日期
- android - 错误应用程序:transformClassesWithFirebasePerformancePluginForDebug 失败
- python - 如何复制一行但在 Pandas 中交换值
- .net-core - AcquireTokenByUsernamePassword 抛出 System.AggregateException 和 MsalServiceException
- cisco - 如何动态拉取当前 Cisco IOS 版本的列表?
- amazon-web-services - AWS Glue- 使用多分隔符以 CSV 格式编写动态框架
- python-3.x - 生成器如何在 pyinput 等事件循环中工作
- batch-file - 复制、重命名和移动目录中的所有文件
- python - 如何用 NumPy 分解多项式并很好地打印它?
- python - 使用 matplotlib 看起来像平面 2D 数学插图的 3D 几何图?