Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.FTN.DEVELOP
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.FTN.DEVELOP с датами от 12 Jul 13 20:52:30 до 18 Oct 24 22:48:06, всего сообщений: 2735
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 584 из 2735 ==================================== RU.FTN.DEVELOP =
От   : Mithgol the Webmaster            2:50/88            27 Dec 14 09:43:06
Кому : Serguei E. Leontiev                                 27 Dec 14 09:43:06
Тема : Черновик стандарта фидонетовских подстрок Unicode (русская версия)
FGHI : area://RU.FTN.DEVELOP?msgid=2:50/88+549e6dbf
На   : area://RU.FTN.DEVELOP?msgid=<1187498401@ddt.demos.su>+41fb0162
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.FTN.DEVELOP?msgid=<1187498419@ddt.demos.su>+d34727c8
Ответ: area://RU.FTN.DEVELOP?msgid=<1187498490@ddt.demos.su>+26ea254f
==============================================================================
Так было 15:43 26 Dec 14 написано от Serguei E. Leontiev к FGHI Robot:

FR>> Остальные подстроки ("подстроки Unicode") преобразуются в формат UTF-7
FR>> (RFC 2152). Hапример, строка, состоящая из символов Unicode U+9802,
FR>> U+5C16, U+5C0D, U+6C7A, U+4E4B, U+7A7F, U+8932, U+5B50, U+7BC7,
FR>> представляется в виде следующей строки:
FR>>
FR>>         +mAJcFlwNbHpOS3p/iTJbUHvH-
FR>>
FR>> Однако же принятый в UTF-7 метод экранирования (плюс перед такой
FR>> строкою и минус после) не достаточен для Фидонета. Поэтому минус
FR>> ДОЛЖЕH быть заменён на точку с запятою, а перед плюсом ДОЛЖЕH быть
FR>> поставлен амперсанд. Hапример, строка,

SEL> Такое определение: как в RFC 2152, но не так, а по другому. Трудно,
SEL> как для понимания, так и для реализации.

SEL> Предлагается изложить в следующей редакции:

SEL> При применении в Фидонет закодированные в UTF-7 последовательности
SEL> символов предваряются знаком амперсанд и завершаются символом точкой
SEL> с запятой.

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

Обоснование же этих поправок в форме 'как в RFC 2152, но не так, а по-другому.
Трудно, как для понимания, так и для реализации' представляется недостаточным.
Я желал бы того, чтобы ты изложил эту свою мысль о трудности гораздо подробнее.
Если трудно для понимания ── расскажи, что не понятно; если трудно реализовать,
то расскажи, в чём трудность; и что будет понятнее, и что проще реализовывать,
если перед точкой с запятою будет стоять минус.

Я, в свою очередь, попробую эти трудности устранить, то есть помочь в понимании
и притом предложить готовую реализацию, на которую можно посмотреть и увидеть,
как она устроена.

Готовая реализация у меня есть в форме модуля для Node.js, содержащего код
на языке JavaScript. По адресу https://github.com/Mithgol/fiunis я выложил
этот код на GitHub под достаточно свободной лицензией (MIT). Там можно увидеть,
что сам джаваскриптовый код этой реализации занимает буквально тридцать строк
(включая и кодировщик, и декодировщик), так что реализация вышла обозримою:

https://github.com/Mithgol/fiunis/blob/2c57b9aa6d574611972d2971d44f2/fiunis.js

Сразу скажу, что эту реализацию я реально использую в своём фидобраузере PhiDo,
а на будущий код планирую и в WebBBS использовать. (Так что это вполне рабочий
пример, а не использующийся только в качестве иллюстрации замысла.)

Сразу скажу ещё, что названный мною размер (тридцать строк) не учитывает код
декодировщика UTF-7 и код кодировщиков UTF-16BE и base64; это потому, что их
я и не сочинял, а использовал готовые. Кодировщик base64 имеется прямо в движке
Node.js, тогда как декодировщик UTF-7 и кодировщик UTF-16BE мною используется
в составе модуля iconv-lite, разработанного Александром Штучкиным:

https://github.com/ashtuchkin/iconv-lite

Глядя на мою реализацию кодека фидонетовских подстрок Unicode, я могу заметить,
что она не станет заметно проще, если перед точкой с запятою в таких подстроках
оставлять минус. Декодировщик станет чуточку проще (в конце тринадцатой строки
не придётся добавлять минус, так как он уж будет), но чуточку сложнее окажется
кодировщик (в конце двадцать седьмой строки придётся добавлять не одну только
точку с запятою, но и минус перед нею). Притом и то, и другое изменение кажется
очень небольшим.

Это всё было ответом на вопрос 'как можно сделать' (на примере джаваскрипта
для движка Node.js), но и вопрос 'зачем' также нуждается в объяснении, и его
я также сейчас объясню.

В качестве представления символов Unicode символами однобайтовой кодировки
я обратился к той кодировке (UTF-7, RFC 2152), которую в своё время изобрели
для решения как раз такой (или весьма сходной) задачи в интернетовских e-mail.
Она позволила интернетчикам, во-первых, оставлять неискажёнными те символы,
для которых есть коды в однобайтовой кодировке (и этим UTF-7 оказалась лучше
более радикальных решений навроде 'закодируем всё в base64'), а во-вторых,
представлять и те символы Unicode, для которых в однобайтовой кодировке нет
готовых кодов (и притом UTF-7 представляет их существенно эффективнее, нежели
некоторые существовавшие до неё решения наподобие 'UTF-8 в quoted-printable').

Кодировка UTF-7 сводится к тому, что текст Unicode сперва записывают в формате
UTF-16BE, а получившуюся последовательность байтов кодируют ASCII-символами
по правилам кодировки base64, после чего ставят плюс перед её началом и минус
в конце её.

Всё у ней хорошо, кроме вот этого вот плюса перед началом и минуса в конце:
их я считаю отнюдь не достаточными для надёжного отчленения подстрок Unicode
от остального (нормального) текста, потому что ведь и в остальном (нормальном)
тексте плюс может без труда появиться перед латинской буквою, арабской цифрою,
косой чертою или другим плюсом.

В качестве способа надёжного экранизования (отчленения) кода от остального
(нормального) текста я вдохновлялся ссылками на символы HTML (HTML 4.01,
подраздел 5.3.1, подраздел 5.3.2). Там используется амперсанд в начале ссылки
и точка с запятой в конце, причём после амперсанда может использоваться символ
'#' (решётка) для указания на то, что дальше не имя символа, а код его.

В Фидонете для оформления фидонетовских подстрок Unicode, следуя этому примеру,
я также решил использовать амперсанд в начале и точку с запятою в конце, притом
сохраняя после амперсанда также и плюс для указания на то, что дальше пойдёт
не имя символа, но и не просто числовой код его, а код UTF-7.

Последовательность символов '&+' много лет не использовалась в Фидонете нигде,
кроме как в UUE-кодах, так что я могу быть совершенно уверен в том, что её нам
достаточно для указания на начало фидонетовской подстроки Unicode (разумеется,
только при том непременном условии, что декодирование UUE будет происходить
раньше, чем декодирование фидонетовских подстрок Unicode; но это разработчикам
будет совсем не сложно устроить и в WebBBS, и в фидобраузерах).

Почему для указания на конец подстроки я не использовал последовательность двух
символов ('-;')? Потому, что каждый из них не принадлежит к числу тех символов,
которые используются в base64-кодировании, так что и одного из них (или минуса,
или точки с запятою) достаточно для указания на то, что коды base64 кончились.
Использовать сразу два ── это расточительство, тем более что в Фидонете часто
количество символов ограничено (в заголовке, в кладже, в таглайне, в ориджине).
Если бы последовательность '&+' для обозначения начала подстроки была не очень
надёжною, то тогда устроить ещё и не менее особый конец строки показалось бы
совершенно необходимым делом, а так ── нет.

Почему из этих двух символов для указания на конец строки я выбрал не минус,
а точку с запятой? Потому, что раз уж я спроектировал фидонетовские подстроки
Unicode в качестве своего рода расширения для существующего стандарта ссылок
на символы HTML (HTML 4.01, подраздел 5.3.1, подраздел 5.3.2), то имело смысл
устроить это расширение обратно совместимым. Если это расширение в дальнейшем
обретёт в Фидонете изрядную популярность, да и сам Фидонет также, то тогда
нельзя исключать возможность обратного заимствования из этого стандарта
в язык HTML для компактной записи последовательностей символов Unicode в HTML.


Фидонет будет великим и гипертекстовым!    [Ru.Mozilla]     http://Mithgol.Ru/
Mithgol the Webmaster.                    [Братство Нод] [Team А я меняю subj]

... 69) За последние 4000 лет не было одомашнено ни одно новое животное.
--- Знаешь ли ты, Serguei, что "зачётка" пишется через "ё"?
* Origin: Я впредь наш Фидонет не бpошу, я сам себе сисоп хоpоший (2:50/88)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.106005 секунды