eword sometimes exceeds 76 columns
Katsumi Yamaoka
yamaoka @ jpl.org
2004年 5月 10日 (月) 21:09:58 JST
Gnus でもヘッダのエンコードには FLIM を使っているんですが[1]、と
きどき RFC2047 の以下の規定が守られないことがあります。
An 'encoded-word' may not be more than 75 characters long, including
'charset', 'encoding', 'encoded-text', and delimiters. If it is
desirable to encode more text than will fit in an 'encoded-word' of
75 characters, multiple 'encoded-word's (separated by CRLF SPACE) may
be used.
While there is no limit to the length of a multiple-line header
field, each line of a header field that contains one or more
'encoded-word's is limited to 76 characters.
まあ実害は無いのですが。例です。
Subject: 12345 寿限無寿限無五劫のすり切れ
↓
Subject: 12345 =?iso-2022-jp?B?GyRCPHc4Qkw1PHc4Qkw1OF45ZSROJDkkakBaJGwbKEI=?=
コードを追ってみると、おそらく eword の長さの計算に誤りは無く、
この例では Subject: の直後の空白の幅が単に無視されているように思
えます。以下のパッチはいかがでしょうか?
* eword-encode.el (mime-encode-header-in-buffer): Don't ignore a
space char at the beginning of a field body.
--- eword-encode.el~ 2004-05-10 11:50:15 +0000
+++ eword-encode.el 2004-05-10 12:02:16 +0000
@@ -689,11 +689,9 @@
(goto-char (point-min))
(let ((default-cs (mime-charset-to-coding-system default-mime-charset))
bbeg end field-name)
- (while (re-search-forward
- (concat "\\(" std11-field-head-regexp "\\)" " ?")
- nil t)
- (setq bbeg (match-end 1)
- field-name (buffer-substring (match-beginning 0) (1- (match-end 1)))
+ (while (re-search-forward std11-field-head-regexp nil t)
+ (setq bbeg (match-end 0)
+ field-name (buffer-substring (match-beginning 0) (1- bbeg))
end (std11-field-end))
(and (delq 'ascii (find-charset-region bbeg end))
(let ((method (eword-find-field-encoding-method
eword の長さの計算もエンコード処理の一部だと考えれば、空白文字を
エンコードの対象にするのは無駄ではない気がします。
[1] http://www.jpl.org/elips/Gnus-Tips-ja.html#11
本日、土屋さんのリポートを受けて改定しました。
--
Katsumi Yamaoka <yamaoka @ jpl.org>
More information about the Emacs-mime-ja
mailing list