Автор Тема: *Суррогатные пары в UTF-16  (Прочитано 1237 раз)

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

Оффлайн Red Khan

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

Оффлайн Bhudh

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

Оффлайн Red Khan

  • Global Moderator
  • *
  • Сообщений: 57665
  • Пол: Мужской
Это из-за того, что PHP не воспринимает строки, состоящие только из суррогатных пар.
Так и знал что узнаю что-нибудь новое о юникоде, спасибо.
The 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

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

Оффлайн Red Khan

  • Global Moderator
  • *
  • Сообщений: 57665
  • Пол: Мужской
Ну как заполнили. Суррогатные пары в диапазоне U+D800 — U+DFFF размещены.
А зачем тогда они нужны?

Оффлайн Валентин Н

  • Сообщений: 47182
  • Пол: Мужской
Эмодзи тоже не видит.
ЗАБАНИЛ ВИКИПЕДИЮ
Нижниь ıндэкс в ҷıсʌах — степень тıсяҷı
Препинания авторские!

Оффлайн Bhudh

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

Оффлайн Red Khan

  • Global Moderator
  • *
  • Сообщений: 57665
  • Пол: Мужской
А зачем тогда они нужны?
Из них составляются все коды высших диапазонов в UTF-16. Low_surrogate_code + high_surrogate_code.
Если глянуть на эту схему и её описание то не все, только D8–DF
(wiki/en) File:Unifont_Full_Map.png

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

Оффлайн Bhudh

  • Сообщений: 63005
  • Пол: Мужской
  • aka 蝎
    • Сайты по языкознанию
Цитировать
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

  • Global Moderator
  • *
  • Сообщений: 57665
  • Пол: Мужской
Вроде разобрался, спасибо.
Цитировать
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) Плоскость_(Юникод)

Эмодзи тоже не видит.
Эмодзи в той же первой плоскости.

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

Оффлайн Bhudh

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

Оффлайн Red Khan

  • Global Moderator
  • *
  • Сообщений: 57665
  • Пол: Мужской
Надо бы issue открыть, а то именно у нас это не то чтобы feature breaking, но таки актуально.

 

В быстром ответе можно использовать BB-теги и смайлы.

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.
Имя: E-mail:
Визуальная проверка:
√49 Напишите ответ строчными буквами:
«Сто одёжек, все без застёжек» — что это?: