首页 > 解决方案 > 用于在 UTF8 和 UTF16 偏移之间转换的 Java 代码(Java 字符串偏移到/来自 Python 3 字符串偏移)

问题描述

给定一个 Java 字符串和该字符串的偏移量,计算同一位置到 UTF8 字符串的偏移量的正确方法是什么?

更具体地说,给定 Java 字符串中有效代码点的偏移量,如何将该偏移量映射到 Python 3 字符串中该代码点的新偏移量?反之亦然?

是否有任何库方法已经提供了 Java 字符串偏移量和 Python 3 字符串偏移量之间的映射?

标签: javapython-3.xunicodeutf-8utf-16

解决方案


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 索引为abc5,但代码点索引(也适用于 Python 3 字符串)为 4。

请注意,正如方法名称所暗示的那样,Java 方法需要一个一个地计算代码点。所以它不是一个封闭的数学公式。


推荐阅读