OberonCore
https://forum.oberoncore.ru/

UTF-8
https://forum.oberoncore.ru/viewtopic.php?f=3&t=2937
Страница 1 из 1

Автор:  Александр Ильин [ Четверг, 28 Октябрь, 2010 07:06 ]
Заголовок сообщения:  UTF-8

Существует ли реализация кодека UTF-8 для Oberon/CP/AO?

Автор:  Евгений Темиргалеев [ Четверг, 28 Октябрь, 2010 07:55 ]
Заголовок сообщения:  Re: UTF-8

Есть конвертер CpcUtf8Conv, там соотв-но процедуры кодирования/декодирования. Для CHAR, без контроля ошибок.

Уточните, пожалуйста, что Вы понимаете под кодеком.

Автор:  Александр Ильин [ Четверг, 28 Октябрь, 2010 08:59 ]
Заголовок сообщения:  Re: UTF-8

Евгений Темиргалеев писал(а):
Уточните, пожалуйста, что Вы понимаете под кодеком.
Ну, собственно, кодер и декодер. Спасибо за подсказку про CPC.

Автор:  Александр Ильин [ Четверг, 28 Октябрь, 2010 09:17 ]
Заголовок сообщения:  Re: UTF-8

Посмотрел CpcUtf8Conv. Действительно, обработки ошибок нет вообще, контроля диапазонов нет, выброса нелегальных символов нет, контроля чрезмерно длинных кодировок нет. Кроме того, поддерживается кодирование и декодирование только до 3-байтовых последовательностей UTF-8 (легальными являются и 4-байтовые последовательности, а ещё есть 5- и 6-байтовые, их тоже надо корректно обрабатывать). Чтение производится в один-единственный CHAR, т.е. сформировать surrogate pair UCS-2/UTF-16 не получится.

Есть такой замечательный стресс-тест для декодеров UTF-8, упоминается в UTF-8 and Unicode FAQ. Много интересного можно разглядеть.

Погодите, у нас же где-то народ XML делал, в том числе для Jabber. Там-то должен быть нормальный, безопасный (хотя бы декодер) UTF-8?

Автор:  Александр Ильин [ Четверг, 28 Октябрь, 2010 09:34 ]
Заголовок сообщения:  Re: UTF-8

Скачал Xmlcore из CPC, увидел тот же самый код плюс дополнительная строчка:
Код:
IF (c1=-17) & (c2=-69) & (c3=-65) THEN rd.ReadChar; END;  (* 25.05.2008 21:58:57 Не знаю почему, мешает парсингу, всегда в начале файла. *)
Спасибо за комментарий, поржал : ))
http://en.wikipedia.org/wiki/Byte_order_mark

Автор:  Ярослав Романченко [ Четверг, 28 Октябрь, 2010 10:08 ]
Заголовок сообщения:  Re: UTF-8

В А2 есть UTF8Strings.Mod с процедурами кодирования/декодирования.

Автор:  Александр Ильин [ Четверг, 28 Октябрь, 2010 11:29 ]
Заголовок сообщения:  Re: UTF-8

Ярослав Романченко писал(а):
В А2 есть UTF8Strings.Mod с процедурами кодирования/декодирования.
Во! Это уже гораздо лучше!
Только всё же безопасность хромает, даже процедура Valid не спасает. Например, передать ей любую строку, в которой первые два символа "C0X 80X", и она всю строку будет считать валидной. Разве же это правильно?

Идея с массивом CodeLength понравилась, но нужны доработки. Например, позиции 0FEH и 0FFH в этом массиве не инициализируются процедурой загрузки модуля. Если там окажется одно из возможных значений, будет ошибка, а если там будет 0X, то, например, процедура Length зависнет на этих символах - вопреки заявлению документации "violations of these assumptions may cause run-time exceptions, but not endless loops or memory corruption".

Другие всякие есть позиции, которые должны бы считаться ошибкой, но будут радостно пропущены процедурой Valid. Например, коды из диапазона суррогатных пар UTF-16, значения > 10FFFFH и некоторые другие.

Вердикт: из рассмотренных на сегодня это самая лучшая реализация, но подходит только для использования с well-formed UTF-8.

Автор:  Пётр Кушнир [ Четверг, 28 Октябрь, 2010 17:58 ]
Заголовок сообщения:  Re: UTF-8

Александр Ильин писал(а):
Скачал Xmlcore из CPC, увидел тот же самый код плюс дополнительная строчка:
Код:
IF (c1=-17) & (c2=-69) & (c3=-65) THEN rd.ReadChar; END;  (* 25.05.2008 21:58:57 Не знаю почему, мешает парсингу, всегда в начале файла. *)
Спасибо за комментарий, поржал : ))
http://en.wikipedia.org/wiki/Byte_order_mark

Вот бы всё про всё знать, чай, не до смеха было бы.

Автор:  Александр Ильин [ Пятница, 29 Октябрь, 2010 05:31 ]
Заголовок сообщения:  Re: UTF-8

Пётр Кушнир писал(а):
Вот бы всё про всё знать, чай, не до смеха было бы.
Не обижайтесь, я не над вами смеялся, а над комментарием.

По-моему, лишние символы фильтровать - задача не для декодера, а для сканера/парсера. Или для того, кто знает, где начало файла, а где середина.

Автор:  Александр Ильин [ Пятница, 29 Октябрь, 2010 20:39 ]
Заголовок сообщения:  Re: UTF-8

Нашёл в системе O3: O3baseStrings.Utf8Decode и Utf8Encode. Тоже безо всякой обработки ошибок, тоже не более трёхбайтовых кодов.

Автор:  Евгений Темиргалеев [ Суббота, 30 Октябрь, 2010 16:59 ]
Заголовок сообщения:  Re: UTF-8

Александр, ещё есть конвертеры: http://zinnamturm.eu/downloadsTZ.htm#UnicodeMappings
Цитата:
UnicodeMappings provide mappers for upper, lower or title case mapping, and also provide converters from Unicode (UTF-8, UTF-16, UTF-32; little or big endian) to other encodings or vice versa.
Посмотрите? :)

Автор:  Александр Ильин [ Суббота, 30 Октябрь, 2010 17:39 ]
Заголовок сообщения:  Re: UTF-8

Евгений Темиргалеев писал(а):
Посмотрите? :)
С удовольствием! Спасибо за ссылку.

Автор:  Роман М. [ Вторник, 09 Ноябрь, 2010 14:51 ]
Заголовок сообщения:  Re: UTF-8

Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
Посмотрите? :)
С удовольствием! Спасибо за ссылку.

Каков будет диагноз?

Ещё такой вопросец. Я хочу экспортировать ODC в текстовый ASCII документ с кодировкой UTF-8 и обратно, импортировать из него. Какую реализацию будет достаточно внедрить? Мне нужно написать процедуры типов Exporter и Importer для ЧЯ.

Автор:  Info21 [ Вторник, 09 Ноябрь, 2010 15:23 ]
Заголовок сообщения:  Re: UTF-8

Неплохо бы иметь такую пару маленьких mapper'ов:
читает голые байты, а выдает (когда его читают) 1, 2-, .. 6-байтные коды.
Политерно и массивами.
И писатель аналогичный.

То есть в почти чистом виде правила кодировки UTF-8.

Автор:  Евгений Темиргалеев [ Вторник, 09 Ноябрь, 2010 15:36 ]
Заголовок сообщения:  Re: UTF-8

Роман М. писал(а):
Ещё такой вопросец. Я хочу экспортировать ODC в текстовый ASCII документ с кодировкой UTF-8 и обратно, импортировать из него. Какую реализацию будет достаточно внедрить? Мне нужно написать процедуры типов Exporter и Importer для ЧЯ.
мы внедрили CpcUtf8Conv, ничего сами не писали, и пока живы :)

Автор:  Роман М. [ Вторник, 09 Ноябрь, 2010 15:55 ]
Заголовок сообщения:  Re: UTF-8

Евгений Темиргалеев писал(а):
Роман М. писал(а):
Ещё такой вопросец. Я хочу экспортировать ODC в текстовый ASCII документ с кодировкой UTF-8 и обратно, импортировать из него. Какую реализацию будет достаточно внедрить? Мне нужно написать процедуры типов Exporter и Importer для ЧЯ.
мы внедрили CpcUtf8Conv, ничего сами не писали, и пока живы :)

Тогда хорошо. Спасибо. А то Александр насторожил своими замечаниями по некоторым реализациям, что я аж засомневался что выбрать.

Поправка.
Как оказалось, CpcUtf8Conv вполне устраивает меня. Обошёлся малой кровью. :)

Автор:  Александр Ильин [ Вторник, 09 Ноябрь, 2010 16:59 ]
Заголовок сообщения:  Re: UTF-8

Роман М. писал(а):
Тогда хорошо. Спасибо. А то Александр насторожил своими замечаниями по некоторым реализациям, что я аж засомневался что выбрать.

Поправка.
Как оказалось, CpcUtf8Conv вполне устраивает меня. Обошёлся малой кровью. :)
Если устойчивость к некорректным входным данным не нужна, то сгодится. Например, если будет декодировать только то, что сам закодировал.

Автор:  alek111 [ Понедельник, 08 Август, 2011 16:37 ]
Заголовок сообщения:  Re: UTF-8

Когда-то давно писал модуль для работы с различными предсталвениями Unicode под XDS-Oberon.
При написании опирался на стандарты.
Для полного счастья не хватает нормализации.

После этого еще делал utf8 -> utf16 и utf16 -> utf8 через конечный автомат, но на паскале. Если интересно могу поискать.

Вложения:
Archive.zip [2.61 КБ]
Скачиваний: 660

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