Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

*Суррогатные пары в UTF-16

Автор Red Khan, октября 12, 2020, 18:22

0 Пользователи и 1 гость просматривают эту тему.

Red Khan

Интересный момент, если вставить в форму полного ответа какую-нибудь экзотику типа тюркских рун или клинописи то предпросмотр не работает, пишет что сообщение пустое.
Вот вам руны и клинопись для теста, если интересно.
𐱅𐰭𐰼𐰃
𐎠𐎼𐏁𐎴𐎡

Bhudh

Это из-за того, что PHP не воспринимает строки, состоящие только из суррогатных пар.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Red Khan

Цитата: Bhudh от октября 12, 2020, 18:25
Это из-за того, что PHP не воспринимает строки, состоящие только из суррогатных пар.
Так и знал что узнаю что-нибудь новое о юникоде, спасибо.
Цитата: https://stackoverflow.com/a/5903080The term "surrogate pair" refers to a means of encoding Unicode characters with high code-points in the UTF-16 encoding scheme.

In the Unicode character encoding, characters are mapped to values between 0x0 and 0x10FFFF.

Internally, Java uses the UTF-16 encoding scheme to store strings of Unicode text. In UTF-16, 16-bit (two-byte) code units are used. Since 16 bits can only contain the range of characters from 0x0 to 0xFFFF, some additional complexity is used to store values above this range (0x10000 to 0x10FFFF). This is done using pairs of code units known as surrogates.

The surrogate code units are in two ranges known as "high surrogates" and "low surrogates", depending on whether they are allowed at the start or end of the two-code-unit sequence.

Таки они заполнили юникод. :)

Bhudh

Ну как заполнили. Суррогатные пары в диапазоне U+D800 — U+DFFF размещены.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Red Khan

Цитата: Bhudh от октября 12, 2020, 19:15
Ну как заполнили. Суррогатные пары в диапазоне U+D800 — U+DFFF размещены.
А зачем тогда они нужны?

Валентин Н

ЗАБАНИЛ ВИКИПЕДИЮ
Нижниь ıндэкс в ҷıсʌах — степень тıсяҷı
Препинания авторские!

Bhudh

Цитата: Red Khan от октября 12, 2020, 19:39А зачем тогда они нужны?
Из них составляются все коды высших диапазонов в UTF-16. Low_surrogate_code + high_surrogate_code.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Red Khan

Цитата: Bhudh от октября 12, 2020, 21:58
Цитата: Red Khan от октября 12, 2020, 19:39А зачем тогда они нужны?
Из них составляются все коды высших диапазонов в UTF-16. Low_surrogate_code + high_surrogate_code.
Если глянуть на эту схему и её описание то не все, только D8–DF
(wiki/en) File:Unifont_Full_Map.png

Или которые с F9 тоже суррогатные пары?

Bhudh

ЦитироватьCode points from U+010000 to U+10FFFF​
Code points from the other planes (called Supplementary Planes) are encoded as two 16-bit code units called a surrogate pair, by the following scheme:
  • 0x10000 is subtracted from the code point (U), leaving a 20-bit number (U') in the hex number range 0x00000–0xFFFFF. Note for these purposes, U is defined to be no greater than 0x10FFFF.
  • The high ten bits (in the range 0x000–0x3FF) are added to 0xD800 to give the first 16-bit code unit or high surrogate (W1), which will be in the range 0xD800–0xDBFF.
  • The low ten bits (also in the range 0x000–0x3FF) are added to 0xDC00 to give the second 16-bit code unit or low surrogate (W2), which will be in the range 0xDC00–0xDFFF.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Red Khan

Вроде разобрался, спасибо.
Цитировать
Surrogates
The UCS uses surrogates to address characters outside the initial Basic Multilingual Plane without resorting to more-than-16-bit byte representations. There are 1024 "high" surrogates (D800–DBFF) and 1024 "low" surrogates (DC00–DFFF). By combining a pair of surrogates, the remaining characters in all the other planes can be addressed (1024 × 1024 = 1048576 code points in the other 16 planes).
(wiki/en) Universal_Character_Set_characters#Surrogates

То есть в юникоде есть полоскости и вся клинопись, тюркские руны, египетские иероглифы и прочяя находятся не в "основной многоязычной плоскости" (плоскости 0) вместе со всякими латиницами-кириллицами-арабицами-иероглифами, а в "дополнительной многоязычной плоскости" (плоскости 1). А вот эти суррогатные пары по сути являются "ссылкам" или "ярлыками" на другие плоскости. Уровни сумрака, блин. :)
(wiki/ru) Плоскость_(Юникод)

Red Khan


Red Khan

Цитата: Bhudh от октября 12, 2020, 18:25
Это из-за того, что PHP не воспринимает строки, состоящие только из суррогатных пар.
В седьмой версии так же? Это вообще как-то поправить можно?

Bhudh

Не знаю. Юникодные функции в PHP отдельным множеством сделаны, видимо, принимает текст из textarea в ответе какая-то из неюникодных и её трэба заменити.
Надо тестировать, в каком именно месте происходит былинный отказ.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Red Khan

Надо бы issue открыть, а то именно у нас это не то чтобы feature breaking, но таки актуально.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр