Как преобразовать UTF-8 byteOffset в charOffset для строки Java? - PullRequest
4 голосов
/ 03 декабря 2009

У меня есть байтовое смещение для байтового массива, содержащего строку в кодировке UTF-8, как я могу преобразовать это в смещение символа для соответствующей строки Java?

NB. этот вопрос звучал так:

У меня есть смещение байта в стандартную строку Java, и я хотел бы преобразовать его в символьное смещение.

На практике это будет означать метод, подобный charOffsetBefore(int byteOffset), поскольку любое смещение байта может быть в середине кодовой точки.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2009

Пожалуйста, будьте крайне осторожны с вашей терминологией, иначе вы запутаетесь. Не существует такого понятия, как «смещение байта в строку Java». Строки Java состоят из 16-битных символов.

Итак, я предполагаю, что у вас есть байтовый массив и смещение, и вы хотите преобразовать его в строку Java и при этом сохранить местоположения (чтобы вы могли отображать их туда и обратно).

Это зависит от кодировки массива байтов. Если это UTF-8, то любой байт, для которого установлен MSB, является частью последовательности кодирования. Ищите байт, который byte & 0xc0 == 0xc0. Это начало последовательности кодирования (см. Статью Википедии ).

Если вы спрашиваете о символах, тогда кодировка UTF-16, и вам нужно искать суррогатных пар .

1 голос
/ 03 декабря 2009

Я бы предложил, чтобы у вас не было байтового смещения в стандартной строке Java. Если да, можете ли вы сказать нам, кто вы его получили (код, пожалуйста)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...