В теме "Default encoding" (http://www.forum.nobat.ru/index.php?…;threadid=1361) обсуждение, к сожалению, в очередной раз перешло на свойства Microsoft и её почтовые клиенты, и за этим потерялась реальная проблема. Процитирую:
Sokol
"Версия The Bat! - 2.01.50. В свойствах account поставлен koi8-r как default encoding для новых
сообщений. Порядок действий:
1. New message на самого себя
2. Параметры - Переводировка - там стоит Cyrillic (koi8-r). не меняем этой установки.
3. Отправляем сообщение. Т.е. в нем нет ни одной русской буквы, т.к. все дефолтные подписи - английские.
4. Открываем полученное сообщение и смотрим заголовки:
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Т.е. encoding us-ascii. Дальнейшие проблемы, думаю, очевидны. Можно ли это как-то поправить? Спасибо."
Alexander Kiselev
1) "Если в сообщении все буквы -- us-ascii, то Бат всю жизнь ставил в хедерах us-ascii, независимо от кодировки по умолчанию. Это вполне соответствует духу и букве RFCs, кстати."
2) "RFC2045, см. определение 7bit data и 8bit data. У Вас -- 7bit data, она кодируется, как RFC822, то бишь us-ascii.
Более того, я вот специально проверил: Пегасус работает совершенно по той же логике, что и Бат, к примеру. И Бекки. Так что не говорите мне, что это неверно."
Не могу не возразить уважаемому Александру по следующим пунктам.
Если известно, что у нас 7-битные данные, то, как совершенно правильно говорит Александр, они долны кодироваться "как RFC822, то бишь us-ascii". Однако как определить, какие у нас данные? Заглянем в упоминаемый Александром RFC2045:
"2.7. 7bit Data
"7bit data" refers to data that is all represented as relatively short lines with 998 octets or less between CRLF line separation sequences [RFC-821]. No octets with decimal values greater than 127 are allowed and neither are NULs (octets with decimal value 0). CR (decimal value 13) and LF (decimal value 10) octets only occur as part of CRLF line separation sequences.
2.8. 8bit Data
"8bit data" refers to data that is all represented as relatively short lines with 998 octets or less between CRLF line separation sequences [RFC-821]), but octets with decimal values greater than 127 may be used. As with "7bit data" CR and LF octets only occur as part of CRLF line separation sequences and no NULs are allowed.
Таким образом, в нём говорится, что в 7-битных данных не допускаются символы с кодами выше 127 ("No octets with decimal values greater than 127 are allowed"), однако никак не говорится о том, что любые данные, в которых таких символов не содержится, обязательно 7-битные. Ни из буквы, ни из духа RFC2045 этого не видно. И я соглашусь с автором вопроса Sokol-ом: по логике, задавая koi8-r в качестве "кодировки по умолчанию", мы как раз и говорим The Bat!-у: "Пожалуйста, если ничего другого не скажу - рассматривай все данные как koi8-r". Александр, Вы ведь не станете утверждать, что символы с кодами до 127 не могут кодироваться как 8-битные данные? ;) Т.е. у Вас получилась достаточно стандартная логическая ошибка: из "Если данные в 7-битной кодировке, то они не могут содержать русских букв" (что, собственно, и сказано в стандарте) Вы (и авторы Бат-а) сделали вывод "Если данные не содержат русских букв, значит, они могут быть только в 7-битной кодировке", А второе из первого на самом деле, согласитесь, не вытекает.
Так что это действительно нелогичное поведение Бат-а, и если Пегасус и Бекки работают по той же логике (в деталях проверять сейчас некогда), то это не значит, что она правильна. Что касается Пегасуса, кстати, то (может, это сейчас изменилось - довольно давно на него не смотрел, но с полгода назад в четвёртой версии было ещё так) Харрис в справке вообще пишет: "Allow 8-bit MIME encodings" "If you check this control, Pegasus Mail will generate MIME messages using the MIME "8BIT" transfer encoding whenever you include 8-bit data in your mail. 8-bit data is illegal in Internet mail (sic! - М.К.), but is used in some countries. This is both a very technical, and potentially very dangerous option and should only be used if you know what you are doing. We recommend you do not check this control except on the advice of a properly qualified person." Так что, при всём уважении к Pegasus и его автору, я бы не стал использовать его как пример в части работы с 8-битными данными…
С уважением, Максим.