java - 用于在 UTF8 和 UTF16 偏移之间转换的 Java 代码(Java 字符串偏移到/来自 Python 3 字符串偏移)
问题描述
给定一个 Java 字符串和该字符串的偏移量,计算同一位置到 UTF8 字符串的偏移量的正确方法是什么?
更具体地说,给定 Java 字符串中有效代码点的偏移量,如何将该偏移量映射到 Python 3 字符串中该代码点的新偏移量?反之亦然?
是否有任何库方法已经提供了 Java 字符串偏移量和 Python 3 字符串偏移量之间的映射?
解决方案
Java 中的正确方法是使用codePointCount:
String sample = " - abc";
int javaIndex = sample.indexOf("abc");
int codePointIndex = sample.codePointCount(0, javaIndex);
System.out.println(javaIndex);
System.out.println(codePointIndex);
输出:
5
4
虽然 Java 的 UTF-16 格式是一种可变长度格式,并且char
表情符号需要两个 s,但根据 Unicode 标准,它只是一个代码点。因此 Java 索引为abc
5,但代码点索引(也适用于 Python 3 字符串)为 4。
请注意,正如方法名称所暗示的那样,Java 方法需要一个一个地计算代码点。所以它不是一个封闭的数学公式。
推荐阅读
- spring - How to stop polling after a message is received? Spring Integration
- vagrant - 如何在 virtualbox 上使用 vagrant 安装 box-cutter/centos72
- javascript - 端点字符串保存在 rails postgresql db 中,无法在 js 前端使用它们进行 fetch() 调用
- regex - 谷歌表格正则表达式与其他正则表达式应用程序不匹配
- java - spring boot GenericFilterBean,在客户端过滤返回错误代码和响应标头
- scala - Scala:制作单例来处理客户端请求
- r - 执行成对测试和生存趋势测试
- c - 在 C 中使用 open() 和 read() 来检查文件
- postgresql - 无法将 Spring Boot -Google App Engine 与 Postgresql - Cloud Sql 连接
- reactjs - Error-Hooks 只能在函数组件的主体内部调用