на главнуюВсе эхи RU.FIDONET.TODAY
войти ?

Выход за пределы CP866

От Mithgol the Webmaster (2:50/88) к Dmitry Bakhrov

В ответ на Заголовок предыдущего сообщения в треде (Имя Автора)


Так было 18:36 05 Jan 18 написано от Dmitry Bakhrov к Vladimir Fyodorov:

VF>> Если ещё сможешь предусмотреть автозамену кавычек-ёлочек, тире,
VF>> троеточий и тому подобных знаков на имеющиеся в CP866, то цены такому
VF>> RSS-роботу не будет.

DB> Увы, в cp-866 есть далеко не все знаки, которые используются при
DB> постинге статей в интернете. В случае с кавычками, многоточиями всё
DB> легко, а вот на что заменять разные ёлочки, верхние нижние индексы,
DB> четверти и прочее...

По адресу https://github.com/Mithgol/fiunis/blob/master/fiunis.rus.txt я предложил способ кодирования символов, выходящих за пределы однобайтовой кодировки (такой, как CP866). Эта гиперссылка публикуется в Ru.Fidonet.Today ежемесячно. Предлагаю использовать этот способ. Для удобства ознакомления прилагаю изложение способа вот прям тут:

**********************************************************************
FGHI FIDONET GLOBAL HYPERTEXT INTERFACE
**********************************************************************
Статус: черновик
Номер редакции: черновик 2.1
Заглавие: Фидонетовские подстроки Unicode
Автор: Mithgol the Webmaster (aka Sergey Sokoloff, 2:50/88)
Дата редакции: 19 May 2017
-+--------------------------------------------------------------------
Содержание:
1. Статус этого документа
2. Введение
3. Ключевые слова для выражения уровней требуемости
4. Восьмибитное кодирование фидонетовского сообщения,
содержащего подстроки Unicode
5. Декодирование восьмибитного фидонетовского сообщения,
содержащего подстроки Unicode
6. Важные примечания
Приложение A. Известные реализации
-+--------------------------------------------------------------------

1. Статус этого документа
-+-----------------------

Этот документ является переводом на русский язык, соответствующим
черновику Предлагаемого Фидонетовского Стандарта (FSP).

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

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

Распространение этого документа не ограничивается, если в его текст
при распространении не будут внесены изменения, не упомянутые явно.

2. Введение
-+---------

Многие классические редакторы почты Фидонета (такие, как GoldED+,
например) были спроектированы как восьмибитные приложения. Они
ожидают, что каждый символ фидонетовского сообщения кодируется одним
байтом. Следовательно, они никогда не будут поддерживать кодировки
Unicode UTF-8 или UTF-16.

Эта ситуация является проблемою типа "курица или яйцо". Сообщения
в кодировке UTF-8 не появляются в Фидонете, так как ни одним из
популярных читальников они никогда не будут прочитаны. С другой
стороны, отсутствие таковых сообщений означает, что у разработчиков
популярных читальников нет нужды развивать свой софт, а у их
пользователей нет нужды обновлять свои читальники или выбирать
какие-либо новые (поддерживающие Unicode) читальники.

Этот документ определяет простой метод, который позволяет
подстрокам Unicode появляться (в кодированном и экранированном виде)
внутри восьмибитных строк.

Метод кодирования основан на формате UTF-7 (RFC 2152).

Метод экранирования вдохновлён ссылками на символы HTML (HTML 4.01,
подраздел 5.3.1, подраздел 5.3.2).

Реализацией этого метода достигается следующая ситуация:

*) Пользователи новых (поддерживающих Unicode) приложений Фидонета
могут читать и записывать подстроки Unicode в восьмибитных
сообщениях.

*) Пользователи старых (восьмибитных) приложений Фидонета могут
читать восьмибитные части сообщения. Подстроки Unicode остаются
неразборчивыми, но для восьмибитного приложения это естественно,
и причиняет лишь небольшое неудобство, и послужит как побуждение
к апгрейду.

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

3. Ключевые слова для выражения уровней требуемости
-+-------------------------------------------------

Ключевые слова "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" и
"OPTIONAL" в оригинале этого документа имеют смысл, соответствующий
описаниям в стандарте FTA-1006 (основанном на RFC 2119).

В этом русском переводе используются следующие ключевые выражения:

"MUST" : "ДОЛЖЕН", "НАДО"
"MUST NOT" : "НЕ ДОЛЖЕН"
"REQUIRED" : "НЕОБХОДИМЫЙ", "ТРЕБУЕМЫЙ", "ТРЕБУЕТСЯ"
"SHOULD" : "НАДОБНО", "СЛЕДУЕТ"
"SHOULD NOT" : "НЕ СЛЕДУЕТ"
"RECOMMENDED" : "РЕКОМЕНДУЕМЫЙ", "РЕКОМЕНДУЕТСЯ"
"NOT RECOMMENDED" : "НЕ РЕКОМЕНДУЕТСЯ"
"MAY" : "МОЖЕТ", "МОЖНО"
"OPTIONAL" : "НЕОБЯЗАТЕЛЬНЫЙ"

4. Восьмибитное кодирование фидонетовского сообщения,
содержащего подстроки Unicode
-+---------------------------------------------------

Спервоначалу исходный текст (Unicode) разделяется, порождая массив
подстрок, следующих друг за другом в последовательном порядке, где
подстроки с чётными индексами (0, 2, 4...) содержат символы, которые
могут быть закодированы целевою кодировкою, а подстроки с нечётными
индексами (1, 3, 5...) содержат символы, которые не могут быть
закодированы целевою кодировкою. (Или наоборот; если первым появится
символ, который не может быть закодирован целевою кодировкою, тогда
его подстрока имеет нулевой индекс и все такие подстроки также имеют
чётные индексы.)

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

Остальные подстроки ("подстроки Unicode") преобразуются в формат
UTF-7 (RFC 2152). Например, строка, состоящая из символов Unicode
U+9802, U+5C16, U+5C0D, U+6C7A, U+4E4B, U+7A7F, U+8932, U+5B50,
U+7BC7, представляется в виде следующей строки:

+mAJcFlwNbHpOS3p/iTJbUHvH-

Однако же принятый в UTF-7 метод экранирования (плюс перед такой
строкою и минус после) не достаточен для Фидонета. Потому за минусом
ДОЛЖНА следовать точка с запятою, а перед плюсом ДОЛЖЕН стоять
амперсанд. Например, строка, состоящая из символов Unicode U+9802,
U+5C16, U+5C0D, U+6C7A, U+4E4B, U+7A7F, U+8932, U+5B50, U+7BC7,
представляется в виде следующей строки:

&+mAJcFlwNbHpOS3p/iTJbUHvH-;

Затем традиционное восьмибитное кодирование совершается для этих
(ASCII-совместимых) символов.

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

5. Декодирование восьмибитного фидонетовского сообщения,
содержащего подстроки Unicode
-+------------------------------------------------------

Прежде всего сообщение декодируется традиционным восьмибитным
декодером, каждый байт декодируется в один символ.

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

Для поиска этих кодированных форм может быть полезным нижеследующее
PECL (Perl-совместимое регулярное выражение):

/&\+[A-Za-z0-9+/]+-;/

Для их декодирования ДОЛЖЕН использоваться некоторый
RFC2152-совместимый декодер UTF-7. (Как объясняется в предыдущем
разделе, фидонетовские подстроки Unicode используют кодировку UTF-7
с другою экранировкою. Если декодер ожидает RFC2152-совместимую
экранировку, то амперсанд перед подстрокою и точка с запятою после
подстроки ДОЛЖНЫ быть убраны перед тем, как подстрока передаётся
декодеру.)

6. Важные примечания
-+------------------

Примечание 1. Амперсанд, точка с запятою, плюс, минус и некоторые
коды base64 (например, заглавные латинские буквы) способны
появляться во блоках кодов UUE в Фидонете. Если программа чтения
фидонетовских сообщений интерпретирует коды UUE, то она ДОЛЖНА
изолировать и декодировать UUE раньше, чем применит декодер
фидонетовских подстрок Unicode к остальному сообщению. Если
программа чтения фидонетовских сообщений не интерпретирует коды UUE
(то есть лишь демонстрирует UUE как большую груду непонятных людям
кодов), то ей МОЖНО не заботиться о том, что часть этих кодов
преобразуется в подстроки Unicode.

Примечание 2. Фидонетовские подстроки Unicode МОГУТ появляться
в исходном сообщении ещё до того, как оно подвергается кодированию
(например, когда идёт обсуждение фидонетовских подстрок Unicode).
К ним МОЖНО применять кодировщик фидонетовских подстрок Unicode
(чтобы их первоначальная форма восстановилась после декодирования;
в противном случае такие подстроки декодированием будут превращены
в соответствующий им Unicode). Имейте в виду нижеследующее:

2.1) Такой второй уровень кодирования НЕ ДОЛЖЕН применяться
к фидонетовским подстрокам Unicode, когда они (случайно)
возникают внутри блоков UUE. В противном случае декодирование
UUE в старых программах чтения фидонетовских сообщений (которые
о фидонетовских подстроках Unicode ничего не знают) окажется
предотвращённым.

2.2) Фидонетовские подстроки Unicode в исходном сообщении МОГУТ быть
оставлены нетронутыми в интересах пользователей старых программ
чтения фидонетовских сообщений (а не то фидонетовские подстроки
Unicode, подвергнутые двойному кодированию, окажутся для них
ещё более нечитаемыми).

2.3) Первоначальная форма фидонетовских подстрок Unicode МОЖЕТ
восстанавливаться в будущем другими средствами (например,
командой "Посмотреть исходный код"). Разумеется, обсуждавшееся
выше "двойное кодирование" перестанет быть нужным, когда такие
другие средства сделаются общераспространёнными.

Приложение A. Известные реализации
-+--------------------------------

Ко времени написания сего документа известны несколько реализаций
черновых редакций сего стандарта.

Эталонная реализация (свободный открытый код):

https://github.com/Mithgol/fiunis

Реализации на уровне приложений, написанных автором стандарта:

*) Fido2RSS https://github.com/Mithgol/fido2rss

*) fido2twi https://github.com/Mithgol/node-fido2twi

*) PhiDo https://github.com/Mithgol/phido

*) twi2fido https://github.com/Mithgol/node-twi2fido/

**********************************************************************
EOTD END OF THE DOCUMENT
**********************************************************************

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

... Hичего, пережили блокаду. Бог даст ── переживём и изобилие! (из анекдота)

--- Последний pаз пpинимал лекаpства от головной боли: 4 января 2018 года.
* Origin: Лао-Цзы ответил на это ему, что теперь есть два Лао-Цзы (2:50/88)

Ответы на это письмо:

From: Username
Заголовок следующего сообщения в треде может быть длинным и его придется перенести на новую строку

From: Username
Или коротким

FGHI-url этого письма: area://RU.FIDONET.TODAY?msgid=2:50/88+5a505742