OberonCore
https://forum.oberoncore.ru/

Что делать с невместимым юникодом?
https://forum.oberoncore.ru/viewtopic.php?f=29&t=6658
Страница 1 из 4

Автор:  adimetrius [ Пятница, 02 Октябрь, 2020 01:07 ]
Заголовок сообщения:  Что делать с невместимым юникодом?

Коллеги,

в юникоде полным полно литер, которые не влезают в тип CHAR целиком. Как полагаете, это проблема? Выходит, на КП/ББ невозможно написать программу, которая будет работать с такими литерами? Что с этим делать, если надо выкрутиться; и какое было бы элегантное и грамотное решение?

Вот поскольку в ETH Active Oberon тип CHAR вообще 0Х..0FFX, Денис Будяк budden, как я понял, использовал 4-байтные записи для представления юникодных литер. Но, поскольку это получается не языковое средство, мне кажется, это громоздко, хотя, видимо, решает поставленную им задачу; и, возможно, вмещает все литеры Ю.

Автор:  Sergej Durmanov [ Пятница, 02 Октябрь, 2020 03:02 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

В А2 поддерживается UTF32 без всяких плясок с бубном/рекордами

Автор:  Илья Ермаков [ Пятница, 02 Октябрь, 2020 10:43 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Для случая ББ, думаю, смотреть в сторону UTF-16, на базе CHAR.

Но вводить его всюду как-то... Только местами, но как?
Если всюду - то об индексируемости можно забыть, это влияет на ряд библиотечных алгоритмов.

Как вариант - для выводов на экран и проч., местно.

Есть ещё одна сырая мысль:
- в КП всегда известен конец массива. В отличие от Цы. Т.е. формат 0-завершённой строки можно дополнить для каких-то библиотек, если нужно, соглашением, что в конце массива лежит что-то служебное. Например, маркер того, что строка не UCS2, а UTF-16.

Автор:  Rifat [ Пятница, 02 Октябрь, 2020 13:02 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Чтобы не было танцев с бубном, то проще использовать UTF-32, тогда все коды будут помещаться в одно 32-битное значение. Будет проще работать, в каких-то местах.
Или же использовать UTF-8, тогда все символы будут иметь разную длину, но так как это будет во всей системе, то поддержка этого будет реализована и протестирована.

Автор:  Илья Ермаков [ Пятница, 02 Октябрь, 2020 17:24 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Возможный вариант:

- введение типа LONGCHAR.

И тогда чётко выделены те строки/функции, которые работают с полным Юникодом.

Надо ещё раз взвесить, кто "обделён" при UCS2.

Автор:  Rifat [ Пятница, 02 Октябрь, 2020 17:52 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Там много кто обделен. В два байта влезает 65536 символов, а всего юникод символов около миллиона.

Автор:  Иван Денисов [ Пятница, 02 Октябрь, 2020 17:53 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Вот из вики https://en.wikipedia.org/wiki/UTF-16
"UCS-2 should now be considered obsolete. It no longer refers to an encoding form in either 10646 or the Unicode Standard."
Так что лучше бы и правда как-то обновить. И сразу обновить формат текстовых документов, чтобы русские тексты не рубились на кусочки при сохранении на фрагменты CHAR и SHORTCHAR.

Автор:  SovietPony [ Пятница, 02 Октябрь, 2020 19:40 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Utf-8 как вариант не рассматривается? Utf-16/32 не очень как-то. Везде придется использовать специальные функции в любом случае для новомодного юникода, так зачем заморачиваться с корявыми кодировками?

Автор:  adimetrius [ Пятница, 02 Октябрь, 2020 23:21 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Как я понимаю, если избрать Utf8 или Utf16, то мы расплачиваемся сложностью алгоритмов, поскольку литеры кодируются переменным числом байт. Элементарное LEN(str$) становится неэлементарным.

А если избрать Utf32, то расплачиваемся размером памяти: для большинства модульных текстов вообще 3/4 памяти - нули, для русскоязычных - половина. Однако выигрываем в простоте алгоритмов, и вообще прозрачности понятий: один CHAR - это именно одна литера, как и подразумевает название, а не половина, не треть и не четверть, в зависимости от того, что было до нее.

Я очень ценю память, и хвастаюсь низким памятепотреблением ББ; но когда на чашах весов прозрачность и простота, с одной стороны, а с другой - удвоение памятепотребления (с 2-4МБ до 4-8МБ, в моих сценариях использования) - я выбираю терять мегабайты и сохранять простоту и прозрачность. Иван Андреич, а в близких к аппаратуре применениях это, наэн, существенно - столько байтов терять?..

Я тоже думал про тип LONGCHAR (возможно - SYSTEM.LONGCHAR, чтобы, например, поэкспериментировать в "песочнице"). Тогда, выходит, будет в языке уже три вида литер и три вида строк.
Любопытно, насколько "совместимы" UCS2 и UTF32: т.е. если приставить "старшие нули" к UCS2 коду литеры, то получится ли валидный UTF32 код той же самой литеры? (Это работает от ASCII к UCS2, что позволяет иметь элементарную реализацию LONG(sstr)/SHORT(str))

А еще, можно же, например, в языке (и, знач, в памяти ЭВМ) использовать UTF32, а при экстернализации по умолчанию (т.е. в Stores.Writer.WriteString/Stores.Reader.ReadString) переходить на UTF8, или как-то иначе упаковывать строки.

Автор:  adimetrius [ Пятница, 02 Октябрь, 2020 23:22 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Sergej Durmanov писал(а):
В А2 поддерживается UTF32 без всяких плясок с бубном/рекордами


А как, если там однобайтовый CHAR?

Автор:  Sergej Durmanov [ Суббота, 03 Октябрь, 2020 09:42 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

adimetrius писал(а):
А как, если там однобайтовый CHAR?

SIGNED32

Автор:  Sergej Durmanov [ Суббота, 03 Октябрь, 2020 09:49 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Ну и в unicode нет соответсвия между codepoint и "символом". Даже для устаревшего UCS2 нужно сканировать строку. Так что в этом плане любая юникодная кодировка не имеет преимуществ.

Автор:  Иван Денисов [ Суббота, 03 Октябрь, 2020 10:24 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Пожалуй, что простота и прозрачность лучше. UTF32 выходит более подходит для простоты алгоритмов. А UTF16 и правда не многим лучше UTF8.
Но в два раза больше памяти... тоже плохо.

Про железо. ББ на железе сам то и не работает пока. Там O7, в котором вот не понятно мне пока, как работать с Кириллицей.

Автор:  Иван Денисов [ Суббота, 03 Октябрь, 2020 11:08 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Sergej Durmanov писал(а):
Даже для устаревшего UCS2 нужно сканировать строку. Так что в этом плане любая юникодная кодировка не имеет преимуществ.
Зачем сканировать строку?

Автор:  Sergej Durmanov [ Суббота, 03 Октябрь, 2020 11:45 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

В юникоде итоговое изображение (глиф) может состоять из нескольких элементов. Соответственно, и юникодных кодов будет несколько. И разрывать эти сочетания нельзя.
https://m.habr.com/ru/company/ruvds/blog/445274/

Автор:  Иван Денисов [ Суббота, 03 Октябрь, 2020 19:42 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Sergej Durmanov писал(а):
В юникоде итоговое изображение (глиф) может состоять из нескольких элементов. Соответственно, и юникодных кодов будет несколько. И разрывать эти сочетания нельзя.
https://m.habr.com/ru/company/ruvds/blog/445274/

Да, это уже какие-то любители всё усложнять придумали. Миллиона символов им мало :) Еще накладывать придумали... усложнение на ровном месте.

Автор:  adimetrius [ Суббота, 03 Октябрь, 2020 20:24 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Похоже, действительно все сложно. Я, по крайней мере, нашел про юни-коды, которые обозначают диакритические знаки: каждый такой знак - отдельный код, и он считается единой литерой со следующим за ним кодом буквы. А также есть, например, код 25EF - кружок. Он, вроде, должен рисоваться поверх (вокруг?) следующей за ним литеры. Правда, под рукой нет ни одной программы, где бы это работало, хаха.

Но в приложении - документ с рожей, в которой какие-то накладывающиеся псевдолитеры есть. В Линуксе библиотека pango рисует их как надо (накладывает), а в ББ TextSetter считает их за отдельные литеры, из-за этого курсор "убегает". В Wine никакого наложения нет, некоторых символов в шрифтах нет, и рожи почти не видно.

С положительной стороны - это, видимо, касается редких (для нас) случаев. К счастью, в русском языке Е-Ё и И-Й - разные буквы; никому даже в голову не приходит, что это диакритики. (Впрочем, и вокруг Ё не утихают споры).

Вложения:
Юнирожа.odc [1.23 КБ]
Скачиваний: 392

Автор:  Info21 [ Суббота, 03 Октябрь, 2020 20:29 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

adimetrius писал(а):
К счастью, в русском языке Е-Ё и И-Й - разные буквы; никому даже в голову не приходит, что это диакритики. (Впрочем, и вокруг Ё не утихают споры).
К несчастью, стали встречаться html-странички, где й сделана парой символов. Какая-то дурная мода.

Автор:  Иван Денисов [ Суббота, 03 Октябрь, 2020 20:33 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

А вот знак удар́ения — полезная шт́ука. Хотелось бы, чтобы это в Блэкбоксе работало. И от него тоже каретка убегает. Так что, пожалуй, что придется это дело как-то учитывать.

Автор:  adimetrius [ Суббота, 03 Октябрь, 2020 20:34 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Info21 писал(а):
К несчастью, стали встречаться html-странички, где й сделана парой символов. Какая-то дурная мода.


Ужас какой... пришлите, пож, ссылку, когда попадется такая в след раз

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/