UTF-7 и набор O, набор D; IMAP RFC3501; RFC2152 Rule 1… А лучше ещё точнее настройку…

Russian main discussion
Post Reply
  • Author
  • Message
Offline
Posts: 6
Joined: Wed Jan 22, 2025 5:23 am

UTF-7 и набор O, набор D; IMAP RFC3501; RFC2152 Rule 1… А лучше ещё точнее настройку…

Post by Лестер Глючный »

три десятка страниц результатов поиска, и только полторы темы нашлось с цифрой "7"! Неужели за три десятка лет никому не было до этого дела? Или это "больная тема"?

Винда так-то до сих пор UTF-7 использует, хоть и не целиком для всего сохраняемого файла, а лишь только определённые строки в [секциях.W] .INI/.THEME/др. подобных файлов, где используются сразу две кодировки (ASNI/OEM и UTF-7), из-за чего приходится всегда открывать такие файлы в определённой ANSI/OEM-кодировке (т.о., приходится тщательно выбирать только UTF-7-кодированный текст и жать ALT+R). Теоретически, тут возможно реализовать самопреобразование значений параметров под [секциями.W] отдельным подключаемым модулем (Plug-in) или даже сценарием (Script), однако мне б хотелось, чтобы и при сохранении в UTF-7 (а можно и в ALT+R тоже) выводился диалог с настройкой правил преобразования… То же можно и при ручном выборе "Открыть как UTF-7".
Например, если сохранить Звуковую Схему с именем !"#$%&*;<=>@[]^_`{|}~\, то эта строка сохранится как есть (без кодирования в UTF-7) в единственную секцию [Sounds], но стоит добавить к этому имени ещё ♩, то добавляется ещё и это:

Code: Select all

[Sounds.W]
SchemeName=+JmkAIQAiACMAJAAlACYAKgA7ADwAPQA+AEAAWwBdAF4AXwBgAHsAfAB9AH4AXA-
P.S. этот
байтами A2DB в ks_c_5601-1987/EUC-KR (id=(51)949 — Korean),
байтами 1B2429430E225B в iso-2022-kr (id=50225) :)
, но не сохраняет его как "?", если "Язык для программ не поддерживающих Юникод" выбран "Китайский (Сингапур)" :( не GB18030 (id=54936), а GB2312 (id=936)…


Если при открытии файла целиком как UTF-7 игнорировать старшие разряды, то это испортит [секцию.A], а последующее сохранение файла в UTF-7 "повредит" ещё и квадратные скобки (т.е. заголовки секций)!
вложенность один в другого, да и внутри значений атрибутов тоже можно "кавычки" закодировать, что тоже приведёт к проблеме с «пересохранением» — всё это не позволяет определить, где допустимо UTF7 конвертирование, а где нет… Из-за нерешаемости подобной проблема на UTF-7 и забили, а после XSS-атак и вовсе запретили его использование…
, вот опциональный набор (Set O), задействующийся в "неуправляемом кодировании", полностью несовместим с RichText FileФорматом…
Поэтому, нужны три 【кнопки】 (не радио-«кружочки») и галочки:
используя WinXP/2k₍﹖₎ API, w/o BOM /* { Только для Windows® INI или INI-подобных (.inf, .theme, и т.д.․) файлов! Производит преобразование только при наличии хотя бы ОДНОГО не-ASCII символа! Осторожно! .RTF/PHP/HTML/XAML/XSL/XSD/JSON/YML и т.д. будут СЛОМАНЫ } */
с BOM (для устарелых почтовых служб) – опасно для старых web-обозревателей /* { ломает .RTF/PHP/HTML/XaML/XSL/XSD/JSON/YML, и т.д.., Меж-=сайтовые атаки… вот почему HTML5 его не поддерживает } */
! " # $ % & * ; < = > @ [ ] ^ _ ` { | } непосредственным ASCII эквивалентами (RFC2152, Rule 1), без BOM, хорошо для Mark-Up`ов, но НЕ ДЛЯ .RTF! /* { по-умолчанию/выбрано, т.к. "не опытный пользователь" может «сломать» файл и возненавидеть это приложение } */
  • Дополнительно кодировать: ☐HORIZ.TAB ☑LINE FEED ☑CARRIAGE RETURN ☑SPACE
  • Non-standard: ☐' ☐, ☐- ☐. ☐/ ☐? из Set D тоже;
  • НЕ КОДИРОВАТЬ ☒~ ☒\ — для совместимости с .RTF, и др содержиащих обратные косые xhtML/XSD, JSON, и т.д.‥
  • ☑ESCAPE ☐NULL
или выбрать из предустановки:
  • .INI/.REG
  • .RTF
  • .PHP
  • .XML/.HTML/.XSD/.XSL, и т.д.
  • .csv
  • ещё какой-нибудь пользовательской…
Затем, при открытии файлов, содержащих точно такие же ASCII-коды, ОСТАВЛЯТЬ их UTF-7 варианты в кодированном виде! Например, следующий фрагмент сохранён в файле:

Code: Select all

noscript>+ADw-script+AD4-bla-bla-bla+ACoAew-dangerous damage-string+AH0APA-/script+AD4-</noscript
что допускается в UTF-7, и если у файла не содержатся "Curly Brackets" и "Asterisk" их ASCII эквивалентами, отображать так:

Code: Select all

noscript>+ADw-script+AD4-bla-bla-bla*{dangerous damage-string}+ADw-/script+AD4-</noscript
Если же содержатся "Curly Brackets" (как у .RTF), отображать так:

Code: Select all

noscript>+ADw-script+AD4-bla-bla-bla*+AHs-dangerous damage-string+AH0APA-/script+AD4-</noscript
Или лучше всё ж ещё и при открытии UTF-7 файла всегда показывать диалог "НЕ ДЕКОДИРОВАТЬ следующее (если закодировано)":
  • ☑HORIZ.TAB ☑LINE FEED ☑CARRIAGE RETURN ☑SPACE ☑~ ☑\
  • ☑' ☑, ☑- ☑. ☑/ ☑?
  • ☑! ☑" ☑# ☑$ ☑% ☑& ☑* ☑; ☑< ☐= ☑> ☐@ ☑[ ☑] ☐^ ☑_ ☐` ☑{ ☑| ☑}
  • ☑ESCAPE ☐NULL
или выбрать из предустановки:
  • .INI/.REG
  • .RTF
  • .PHP
  • .XML/.HTML/.XSD/.XSL, и т.д.
  • .csv
  • ещё какой-нибудь пользовательской…
Предупреждать о найденных ASCII-эквивалентах преобразованных символов в открываемом файле (т.е. когда декодирование ещё производится)!

Другая версия, IMAP RFC3501 "ИЗМЕНЁННОГО («ИСПРАВЛЕННОГО») UTF-7": кодирует & ($26ʰ) ASCII-символ вместо + ($2Bʰ) — ничего не делает с $20ʰ‥25ʰ, $27ʰ‥7Eʰ ASCII-кодами₍﹖₎
преобразовывать HTML <> RichText сценарием converter.js от Infocatcher? Да, ещё бы туда base58/yEnc/UU encode/XX encode/BinHex/BtoA…
Вся эта тема предложена азиатскому wxMEdit, но что-то уже больше полутора лет "думает" над этим вопросом (хотя вроде положено «3 года ждать»), т.к. там можно непосредственно сами байты редактировать (в отличие от AkelPad), правда, там проблема только со вставкой "шестнадцатеричных цифр" в поле байтов, мне не хватало возможности "прямо в оперативке" (без использования временных файлов) конвертировать base64 в двоичные данные (чтобы видеть непосредственно уже сами байты и их там же править), ну и наоборот.
Вроде и UTF-7 так же позволяет хранить двоичные данные, вот только всё ещё вынуждены возиться с base64 :)
Post Reply