[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: wanderlust & octet.el
;; やっと仕事が一段落したので, 色々やってみて原因が分かりました.
In the message [emacs-w3m : No.02779]
on Mon, 11 Feb 2002 18:56:18 +0900, Hiroya Murata wrote:
> edebug で追っかけた所, octet-filter-call2-extra() で一時的に作成
> している infile と mime-save-content() で保存したファイルとでサイ
> ズが異なっていました. 中身を binary で開いて比較すると, 幾つかの
> バイトが欠落している様に見えます.
mime-\(pre\)?view-octet では, entity の内容をバッファに準備するの
に以下の様な code を使っています.
(with-temp-buffer
(set-buffer-multibyte nil)
(insert (mime-entity-content entity))
...
ここで, User-Agent の環境で entity が, base64 で符号化されていた場合,
(multibyte-string-p (mime-entity-content entity))
=> t
となります. 結局, unibyte のバッファに multibyte の文字列を
insert するので, この時点でバッファの内容が壊れてしまっているのが
原因の様です.
(with-temp-buffer
(set-buffer-multibyte t)
(insert (mime-entity-content entity))
(set-buffer-multibyte nil)
...
とか
(with-temp-buffer
(set-buffer-multibyte nil)
(mime-insert-entity-body entity)
(mime-decode-region (point-min) (point-max)
(mime-entity-encoding entity))
...
とかすれば, 動くのは確認したんですが, どっちも何かすっきりしませ
ん. どう直すのが, 良いでしょうか?
;; 因に, XEmacs はともかく, Emacs21 で問題とならないのは何でかと
;; 思い, cvs からソースを取ってきて調べてみたら, base64 の復号化
;; に使われる base64-decode-string() で文字列を作るのに使われる函
;; 数が, make_string() から make_unibyte_string() に変更されてい
;; ました.
--
Hiroya Murata (村田 浩也) <lapis-lazuli@pop06.odn.ne.jp>
PGP fingerprint: 53B6 1B4A 8193 A2D4 1526 BC9E 9AEF 2F6D 249D 5F17