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 никакого наложения нет, некоторых символов в шрифтах нет, и рожи почти не видно. С положительной стороны - это, видимо, касается редких (для нас) случаев. К счастью, в русском языке Е-Ё и И-Й - разные буквы; никому даже в голову не приходит, что это диакритики. (Впрочем, и вокруг Ё не утихают споры).
|
Автор: | 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/ |