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

Re: decode-coding-regin() with utf-8



白井です。昔を思い出しながら試してみました。

From:  Katsumi Yamaoka <yamaoka@xxxxxxx> さん曰く
Subject: [emacs-w3m:08532] Re: decode-coding-regin() with utf-8
Message-ID: <b4m3bi4knrk.fsf@xxxxxxx>
Date: Tue, 28 Feb 2006 15:20:31 +0900
> 
> http://news.gmane.org/group/gmane.emacs.w3m/thread=5249/force_load=t
> 
> から始まるスレッドにつなげます。最初の白井さんの記事を要約すると、
> 
>   テキストを何かの coding system でエンコードしたものを unibyte
>   なバッファに挿入してからデコードするときに、2005年3月の時点の
>   Emacs 22.0.50 では、次のような順序で行なうとうまくいかなかった
>   ようです。

当時の問題点は、

>> いつからかはわかりませんが、最近の Emacs CVS Head の CJK モード
>> を使って、utf-8 (や utf-16) を扱う場合、Emacs 立ち上げ後、最初に
>> utf-8 を使うときに subst-jis などをロードしますが、そのときの関
>> 数が decode-codeing-region() だと decode 結果が化けるようです。

のように、『最初に utf-8 を使うときに decode-codeing-region() だ
と文字化けするときがある』でした。詳しくは覚えていませんが、最初
に utf-8 を使うときに subst-jis などをロードしますが、そのタイミ
ングがちょっと遅かったんじゃなかったかな?と記憶しています。

## 全然違っていたかもしれませんが。。。

山岡さんの書かれているように、今の emacs-22.0.50 だと、起動時に

Loading subst-ksc...done
Loading subst-gb2312...done
Loading subst-big5...done
Loading subst-jis...done

しているので、一年前の症状は発生しないようです。

しかし、どこで subst-jis をロードしているのかな?と調べたところ、
startup.el の

(defun command-line ()
 <...>
	(set-language-environment current-language-environment)))
↓
(defun set-language-environment (language-name)
 <...>
    (utf-translate-cjk-load-tables)

からだということがわかりました。で、意地悪テストで

% setenv LANG C
% emacs -q 

と立ち上げた Emacs で、最初に
http://article.gmane.org/gmane.emacs.w3m/5249 の "朝日新聞" を試
したら、案の定、昔と同じように文字化けしました :-)

なので、

> ところが、現在の Emacs 22.0.50 では [1] のやり方でも問題無いよう
> に見えます。

これは真ではないということになります。

> 今後は [1] のやり方に統一しようと思うのですが、ご意見をいただけ
> ますか?

Emacs-22 と 23 でコードを分けるのもめんどくさいですから [1] にし
て、Emacs-w3m 的には起動時に (utf-translate-cjk-load-tables) 相
当を呼んじゃうとか ^^;;;

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxx)