[Date Prev][Date Next][Thread Prev][Thread Next][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 で使っています)
--
白井秀行@引用ばっかり