如何将UTF-8 byteOffset转换为Java字符串的charOffset?

问题描述:

我有一个包含UTF-8编码字符串的字节数组的字节偏移量,我如何将它转换为相应的Java字符串的char偏移量?如何将UTF-8 byteOffset转换为Java字符串的charOffset?

注:这个问题用来读取:

我有一个字节偏移到一个标准的Java字符串,我想将其转换为字符偏移量。

实际上,这意味着像charOffsetBefore(int byteOffset)这样的方法,因为任何字节偏移都可能在代码点的中间。

谢谢。

请对您的术语非常警惕,否则您会感到困惑。 “没有像”Java字符串中的字节偏移量“这样的东西。 Java字符串由16位字符组成。

所以我假设你有一个字节数组和一个偏移量,并且你想把它转换成一个Java字符串并且仍然保留位置(这样你可以来回映射)。

这取决于字节数组的编码。如果它是UTF-8,那么任何有MSB设置的字节都是编码序列的一部分。搜索byte & 0xc0 == 0xc0的字节。这是编码序列的开始(请参阅Wikipedia article)。

如果您询问字符,那么编码是UTF-16,您需要查找surrogate pairs

我建议你没有一个字节偏移到一个标准的Java字符串。如果确实如此,可以告诉我们你是谁(代码请见)