LINUX.ORG.RU

Unicode 16.0

 , ,

Unicode 16.0

1

2

10 сентября состоялся выпуск 16.0 стандарта кодирования символов Unicode.

В этой версии добавлено 5185 новых символов, включая:

  • 3995 дополнительных символов египетских иероглифов;
  • семь новых письменностей (тулу, албанский Тодри, гарай (Сенегал), сунвар Джентича, гурунг, кират и ол-онал);
  • семь новых символов эмодзи: лицо с «мешками» под глазами, отпечаток пальца, безлистное дерево, корнеплод, арфа, лопата и брызги;
  • флаг острова Сарк;
  • более 700 символов устаревшей вычислительной техники.

На данный момент стандарт содержит 154998 символов, 168 письменностей и 3790 эмодзи.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 3)

Ответ на: комментарий от dataman

Я не понимаю твои ответы, поэтому не буду их обсуждать, давай вернемся к тому что ты скинул из Wikipedia, буду рассуждать в установленных unicode.org терминах

UTF-32 ... символы Юникод ... индексируемы ...

Это неверно, дальше объясняю почему, но предплагаю что это твое мышление. Символ это не кодовая точка. char32_t может вместить только любую кодовую точку, и думаю лишь временно, а любой символ в него поместить не получится, так же как и в UTF-(8|16), хотя некоторые и влазят.

Когда говорят о возможности индексирования строки, подразумевают что индексируется строка, текст, а не набор кодовых точек Unicode. При возможности беспроблемной индексации строки, операция «заменить 5 символ на символ цифры 1», превращается в

str[5] = '1'
Что не работает если str определенна как char32_t str[]. Индексация кодовых точек может кому то и нужна, но я не могу придумать зачем, обычно работают с байтами или графемами.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 3)
Ответ на: комментарий от Xintrea

По ссылке ничего вообще не наблюдается, такое ощущение что смотреть эту страницу нужно с поддержкой шрифтов только что зарелизенногоо стадарта.

kirill_rrr ★★★★★
()
Ответ на: комментарий от R_He_Po6oT

Интересно, а сколько всего ещё осталось включить символов?

Полагаю, запас символов во Вселенной не ограничен. Так что только отстрел членов комитета способен остановить эту мясорубку.

Croco ★★★
()
Ответ на: комментарий от I-Love-Microsoft

раз они такие добавляторы, то могли бы

Фишка комитетов ровно в том, что они не несут ни малейшей ответственности за содеянное. Если бы это было не так, на земле настал бы рай, и в этом раю не было бы ни одного комитета.

Croco ★★★
()

семь новых символов эмодзи: лицо с «мешками» под глазами, отпечаток пальца, безлистное дерево, корнеплод, арфа, лопата и брызги;

ну наконец-то! лопата есть, теперь можно закапывать это говно!

PerdunJamesBond
()
Ответ на: комментарий от MOPKOBKA

Символ – это тоже мутное понятие. Является ли лигатура одним символом или несколькими? Являются ли модификаторы эмодзи (пол, всет кожи и т.п.) отдельными символами? Диакритика?

Я думаю разумно вообще забыть о концепции символов при работе с текстом и индексировать всё в байтах. Рассматривать любой символ как строку.

X512 ★★★★★
()
Ответ на: комментарий от X512

На unicode.org есть пояснение по терминам, там отвечают на твои вопросы.

MOPKOBKA ★★★★
()
Ответ на: комментарий от sena

Не понял в чём суть. Зачем делить байт номера, например? В целом, напоминает Win1251 и пр. Хотя и без номера кодировки.

rechnick ★★★
()
Ответ на: комментарий от rechnick

Ну основная идея надеюсь понятна? Вместо того чтобы делать одну кодировку на все языки, оставить (как раньше) кучу кодировок, но при этом добавить префикс переключения языка. Это логично, потому что тексты и строки обычно содержат в основном длительные последовательности символов на одном языке. Это позволит сэкономить память.

Дальше уже вопрос, как это сделать лучше, потому что есть несколько вариантов.

Например можно зарезервировать одно значение байта (допустим 255 или 0, но ноль плохо потому что 0 уже используется в С для обозначения конца строки), который будет запрещён к использованию во всех языках и будет обозначать что за ним идёт код переключения языка.

Таким образом, если первый байт строки будет не 255, то по-умолчанию мы может интерпретировать её как ascii, пока не встретится 255. Это даст совместимость с ascii текстами. А если мы встретим в тексте 255, то должны будем прочитать код языка из последующих байт.

Есть и другие варианты, если зарезервировать несколько значений, а не одно.

sena ★★
()
Последнее исправление: sena (всего исправлений: 1)
Ответ на: комментарий от sena

Например можно зарезервировать одно значение байта (допустим 255 или 0, но ноль плохо потому что 0 уже используется в С для обозначения конца строки), который будет запрещён к использованию во всех языках и будет обозначать что за ним идёт код переключения языка.

Ненадёжно, потеряется этот байт и всё превратится в кашу.

ptah_alexs ★★★★★
()
Ответ на: комментарий от ptah_alexs

Ненадёжно, потеряется этот байт и всё превратится в кашу.

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

sena ★★
()
Последнее исправление: sena (всего исправлений: 2)
Ответ на: комментарий от sena

Кто его знает, будет ли это лучше и экономичней. «Просто текст» сейчас редкость. Текст сейчас в основном форматирован. Попадая в Word (Writer) и прочие он сразу автоматом приобретает массу параметров. Или взять html. Там текст заключён в тэги. Одни теги вложены в другие. Где ставить маркер? Где-то в начале? Может вообще в head? Или в каждый отдельный p? В общем, много вопросов.

rechnick ★★★
()
Ответ на: комментарий от sena

И, кстати, ещё один момент. Предположим, текст промаркирован где-то там, выше. А ты выделил и скопировал в середине. Что ты скопировал?

rechnick ★★★
()
Ответ на: комментарий от sena

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

rechnick ★★★
()
Ответ на: комментарий от sena

вспоминаю старую идею, иметь номер кодировки перед группой символов. Типа сначала идёт номер кодировки «русский», а потом символы в этой кодировке

Так в Delphi сделано. Но там номер кодировки не на группу символов, а на всю строку.

dataman ★★★★★
() автор топика
Ответ на: комментарий от rechnick

И, кстати, ещё один момент. Предположим, текст промаркирован где-то там, выше. А ты выделил и скопировал в середине. Что ты скопировал?

Я описал как хранить в большом куске, в файле. А для работы с отдельными строками в памяти возможны варианты. Тебя же устраивает сегодня что где-то по тексту в текстовом файле раскиданы переводы строк?

Текстовый редактор, например, может вставлять маркер в начале каждой строки при загрузке файла в память. И наверное ещё лучше пойти дальше и разделять на строки в памяти всегда так, чтобы они всегда были на одном языке.

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

Не сильно усложняется даже по сравнению со старым однобайтовым текстом. Да, для работы со строками удобней будет использовать библиотеку, но это же сегодня надо делать и для юникода. Собственно работа с маркером языка будет подобна тому что и сегодня с маркером новой строки (который у нас ещё и двух типов - юниксовый однобайтовый и досовский из двух байт). Обычно строки при загрузке из текстового файла разбивают по этим маркерам. А тут нужно будет разбивать дополнительно и по маркеру 255. Всего-то! Примерно столько же работы. А если в каждой строке хранится её кодировка, то всё просто. То есть ты всегда будешь знать какой язык у тебя в строке хранится.

sena ★★
()
Последнее исправление: sena (всего исправлений: 3)
Ответ на: комментарий от dataman

Так в Delphi сделано. Но там номер кодировки не на группу символов, а на всю строку.

Ну я больше про файлы говорил. А в памяти наверное действительно удобней будет хранить один язык в одном monostring. А для удобства работы наверное неплохо будет сделать ещё один уровень абстракции - цепочка строк, что-то вроде сhainstring, который будет объединять цепочку monostring в одну строку. Вопрос только, лучше ли их хранить одним куском в памяти или отдельными кусками. Наверное понадобятся оба варианта.

Можно ещё посмотреть, как хранятся в памяти всякие markdown тексты, которые имеют маркеры.

sena ★★
()
Последнее исправление: sena (всего исправлений: 4)

Бедные авторы шрифтов…

hatred ★★★
()

чтобы написать свинья используя египетские иероглифы - нужно поставить птицу, хуюмбулу и свинью. хотя свинья это отдельный иероглиф. к чему бы не использовать его без птицы 𓃟𓃟𓃟

shimajima
()
Ответ на: комментарий от Croco

ГОРШОЧЕК, НЕ ВАРИ!!!
Когда им уже кто-нибудь геноцид устроит, а?

Когда кончится место в 32 битах.

question4 ★★★★★
()
Ответ на: комментарий от Xintrea

Я думал что одних только японских иероглифов около 150000. Плюс китайских столько же. Плюс прочие символы.

Когда задумывали Юникод в самом начале 1990-х, исходили из того, что все иероглифы Китая, Кореи и Японии — общие (CJK — Chinese, Japanese, Korean), и их менее 40 000. Плюс слоговые алфавиты для Кореи и Японии. Реально там нашлись неучтённые тонкости, но этот блок более чем достаточен для повседневного использования. Встречал утверждения, что в японскую 2-байтную таблицу впихнули всё вышеперечисленные с учётом этих тонкостей, плюс все европейские, включая кириллицу, и ещё много места осталось, но все предпочли Юникод.

question4 ★★★★★
()
Ответ на: комментарий от shimajima

чтобы написать свинья используя египетские иероглифы - нужно поставить птицу, хуюмбулу и свинью. хотя свинья это отдельный иероглиф. к чему бы не использовать его без птицы

Насколько я помню детские научно-популярные книги о древнеегипетском, символы большую часть их истории обозначали не слова, от которых они произошли, а какой-то согласный звук из соответствующего слова. Например, символ льва обозначал звук «л». Гласных не было, и читатель должен был угадывать, что и куда в этот набор согласных подставить. А чтобы сделать прочтение однозначным, добавляли специальный символ, обозначавший общую тему. Поэтому могу предположить, что там 2 символа — звуки из слова «свинья», а птица обозначает «животное». Как-нибудь так.

question4 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.