如何将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字符串。如果确实如此,可以告诉我们你是谁(代码请见)