Что такое "суррогатная пара" в Java?
Я читал документацию для StringBuffer, в частности обратный() метод. В этой документации упоминается что-то о суррогатные пары. Что такое суррогатная пара в этом контексте? А какие бывают низкий и высокий суррогаты?
5 ответов:
термин "суррогатная пара" относится к средству кодирования символов Юникода с высокими кодовыми точками в схеме кодирования UTF-16.
в кодировке Unicode символы сопоставляются со значениями между 0x0 и 0x10FFFF.
внутренне Java использует схему кодирования UTF-16 для хранения строк текста Unicode. В UTF-16 используются 16-битные (двухбайтовые) кодовые единицы. Поскольку 16 бит может содержать только диапазон символов от 0x0 до 0xFFFF, некоторые дополнительные сложность используется для хранения значений выше этого диапазона (от 0x10000 до 0x10FFFF). Это делается с помощью пар кодовых единиц, известных как суррогаты.
единицы суррогатного кода находятся в двух диапазонах, известных как "высокие суррогаты" и "низкие суррогаты", в зависимости от того, разрешены ли они в начале или в конце последовательности из двух кодов.
ранние версии Java представляли символы Юникода, используя 16-битный тип данных char. Эта конструкция имела смысл в то время, потому что все символы Юникода имели значения менее 65 535 (0xFFFF) и могли быть представлены в 16 битах. Позже, однако, Unicode увеличил максимальное значение до 1,114,111 (0x10FFFF). Поскольку 16-разрядные значения были слишком малы для представления всех символов Юникода в Unicode версии 3.1, 32-разрядные значения, называемые кодовыми точками, были приняты для кодировки UTF-32 схема. Но 16-разрядные значения предпочтительнее 32-разрядных значений для эффективного использования памяти, поэтому Unicode представил новый дизайн, позволяющий продолжать использовать 16-разрядные значения. Эта конструкция, принятая в схеме кодирования UTF-16, присваивает 1,024 значения 16-битным высоким суррогатам(в диапазоне от U+D800 до U+DBFF) и еще 1,024 значения 16-битным низким суррогатам (в диапазоне от U+DC00 до U+DFFF). Он использует высокий суррогат, за которым следует низкий суррогат-суррогатная пара-для представления (продукт 1,024 и 1,024) 1,048,576 (0x100000) значения между 65,536 (0x10000) и 1,114,111 (0x10FFFF).
в этой документации говорится, что недопустимые строки UTF-16 могут стать действительными после вызова
reverseметод, так как они могут быть превратности допустимых строк. Суррогатная пара (обсуждается здесь) - это пара 16-битных значений в UTF-16, которые кодируют одну кодовую точку Unicode; низкие и высокие суррогаты-это две половины этой кодировки.
суррогатные пары относятся к способу кодирования определенных символов UTF-16, см. http://en.wikipedia.org/wiki/UTF-16/UCS-2#Code_points_U.2B10000..U.2B10FFFF
суррогатная пара - это две "кодовые единицы" в UTF-16, которые составляют одну "кодовую точку". Документация Java утверждает, что эти "кодовые точки" по-прежнему будут действительны, с их "кодовыми единицами", упорядоченными правильно, после обратного. В нем также говорится, что две непарные единицы суррогатного кода могут быть реверсированы и образовать действительную суррогатную пару. А это значит, что если есть непарные кодовые единицы, то есть шанс, что реверс реверса может не совпадать!
обратите внимание, хотя, в документации ничего не говорится о Графемах, которые представляют собой несколько кодовых точек вместе взятых. Это означает, что e и акцент, который идет вместе с ним, все еще могут быть переключены, таким образом, помещая акцент перед e. что означает, что если есть еще одна гласная перед e, она может получить акцент, который был на e.
Yikes!
Comments