[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: wanderlust & octet.el



# すっかり解決してしまった後なんですが ^^;;

そういえば、すっかり忘れていたのですが、似たような問題で、

From: Yuuichi Teranishi <teranisi@gohome.org> さん曰く
Subject: [emacs-w3m:03105] Re: wanderlust & octet.el
Message-ID: <m3663b1hr7.wl@gohome.org>
Date: Tue, 02 Apr 2002 01:54:52 +0900

寺西> > となります. 結局, 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))
寺西> >     ...
寺西> > 
寺西> > とかすれば, 動くのは確認したんですが, どっちも何かすっきりしませ
寺西> > ん. どう直すのが, 良いでしょうか?
寺西> 
寺西> うーむ、そういえば昔 EMY でも同じようなこと言ってたような。
寺西> …と思って、EMY のソースをのぞいてみたら、こうなってました。
寺西> 
寺西>    (wit-temp-buffer
寺西>        (if (featurep 'xemacs)
寺西>             (insert (mime-entity-content entity))
寺西>           (let ((content (mime-entity-content entity)))
寺西>             (if (not (multibyte-string-p content))
寺西>                 (set-buffer-multibyte nil))
寺西>             (insert content)))

半田さんにこういうことを教えて貰ったことがあります。

From: Kenichi Handa <handa@etl.go.jp> さん曰く
Subject: Re: UTF-8 decode error
Message-ID: <200107310657.PAA00780@etlken.m17n.org>
Date: Tue, 31 Jul 2001 15:57:52 +0900 (JST)

handa> Hideyuki SHIRAI (白井秀行) <shirai@rdmg.mgcs.mei.co.jp> writes:
handa> > (3)
handa> > (let ((str (base64-decode-string "55m95LqV56eA6KGM"))
handa> >       (cs 'utf-8))
handa> >   (with-temp-buffer
handa> >     (set-buffer-multibyte nil)
handa> >     (insert str)
handa> >     (set-buffer-multibyte t)
handa> >     (decode-coding-region (point-min) (point-max) cs)
handa> >     (buffer-string)))
handa> > => 化け化けの文字
handa> 
handa> > (4)
handa> > ところがこうすると、
handa> > (let ((str (base64-decode-string "55m95LqV56eA6KGM"))
handa> >       (cs 'utf-8))
handa> >   (with-temp-buffer
handa> >     (set-buffer-multibyte t)
handa> >     (insert str)
handa> >     (decode-coding-region (point-min) (point-max) cs)
handa> >     (buffer-string)))
handa> > => "白井秀行"
handa> 
handa> > となります。(3) が化け化けで、(4) がちゃんと decode 出来るのはお
handa> > かしいですよね。(きっと)
handa> 
handa> > Emacs 21.0.104 + Mule 5.0 + Mule-UCS 0.84 という組合わせでは (3)
handa> > がちゃんと decode できて、(4) が化け化けという、期待通り(?)の動
handa> > 作になります。Mule 4.0 は手元に無いので確かめていません。

と聞いたところ、

handa> これは base64-decode-string の仕様が emacs 21 で以下のように
handa> 変わったからですね。 僕も知らなかった。^.^;;;
handa> 
handa> 2000-10-23  ShengHuo ZHU  <zsh@cs.rochester.edu>
handa> 
handa> 	* fns.c (Fbase64_decode_string): The decoded result should be unibyte.
handa> 
handa> だから、
handa> (let ((str (base64-decode-string "55m95LqV56eA6KGM"))
handa>       (cs 'utf-8))
handa>   (with-temp-buffer
handa>     (set-buffer-multibyte (multibyte-string-p str))
handa>     (insert str)
handa>     (decode-coding-region (point-min) (point-max) cs)
handa>     (or (multibyte-string-p str)
handa> 	(set-buffer-multibyte t))
handa>     (buffer-string)))
handa> というようにすれば emacs-20.7 でも emacs-21.1 でも大丈夫のは
handa> ずです。

結局、Mule 4.1 の string を decode-coding-string しても、
post-conv を呼ばないというバグを回避するために、

From: Hideyuki SHIRAI (白井秀行) <shirai@rdmg.mgcs.mei.co.jp> 曰く
Subject: Re: UTF-8 decode error
Message-ID: <20010731.170900.68558094.shirai@rdmg.mgcs.mei.co.jp>
Date: Tue, 31 Jul 2001 17:09:00 +0900 (JST)

白井> (let ((str (base64-decode-string "ysfRyrTVpMPRug=="))
白井>       (cs 'tis-620))
白井>   (with-temp-buffer
白井>     (set-buffer-multibyte (multibyte-string-p str))
白井>     (insert str)
白井>     (or (multibyte-string-p str)
白井>  	(set-buffer-multibyte t))
白井>     (decode-coding-region (point-min) (point-max) cs)
白井>     (buffer-string)))

な感じにしました。(これをもとにして mew-mule3.el で使っています)

-- 
白井秀行@引用ばっかり