{encode|decode}-mime-charset-* (Re: T-gnus bbdb)

守岡 知彦 / MORIOKA Tomohiko tomo @ kanji.zinbun.kyoto-u.ac.jp
2000年 7月 18日 (火) 13:13:53 JST


>>>>> [semi-gnus-ja : No.5408] にて
>>>>> “山岡さま”= Katsumi Yamaoka <yamaoka @ jpl.org> さま曰く:

山岡さま> enable-multibyte-characters が nil だと 
山岡さま> encode-mime-charset-region などが何もしないせいですね。→ 
山岡さま> mcs-e20.el
山岡さま> ぼくはこの設計意図が何なのか知らないのですが、XEmacs などと
山岡さま> の互換性を考慮して enable-multibyte-characters は不問にする
山岡さま> か、default-enable-multibyte-characters を参照するのでも良い
山岡さま> ような気がしています。まったく確信はありませんが。

mcharset は unibyte の世界で使うことも考慮しています。multibyte の世界
で使う場合 unibyte の世界は byte 列の世界ですが、unibyte の世界で使う
場合 unibyte の世界は文字列です。

decode-mime-charset-* は byte 列 → 文字列 への変換であり、
encode-mime-charset-* は 文字列 → byte 列 への変換です。

前述のとおり、preview-buffer が multibyte の場合、unibyte = byte 列,
multibyte = 文字列 なので、decode は unibyte → multibyte, encode は
multibyte → unibyte の変換となります。同様に、unibyte の場合は、それ
ぞれ unibyte → unibyte, unibyte → unibyte の変換となります。

ところで、Emacs 20 では multibyte buffer で byte 列を安全に表現できな
いので、1つの buffer で byte 列と文字列を混在させるのはまずいです。よっ
て、-region は禁じ手となります。

なお、Emacs 21 では XEmacs-mule のように、multibyte buffer で byte 列
を安全に表現できるようになる(128 〜255 を文字に変換して(binary 用の 
leading-byte を付けて)buffer に格納するようになる)そうなので、
multibyte buffer だけで処理できるようになると思います。但し、byte と文
字の区別はないので、どっちのつもりで扱っているのかを programmer が判断
する必要があります。XEmacs-mule の場合、単一の buffer 表現しか無いので、
変換が生じず、問題ありませんが、Emacs 21 の場合、unibyte buffer も存在
し、unibyte buffer で 0 〜 255 をどういう文字に対応させているかは環境
に依存するので、unibyte buffer から取って来た文字列を multibyte buffer 
に挿入する場合には変換が生じます(実際にどのように変換するかの詳細は知
りません)。よって、やはり複数 buffer を使う場合には byte と文字の区別
を付けて取り扱う必要があると思われます。

-- 
===『幾千億の分子に分かれても ========================================
     決して忘れない。    
     この宇宙が終るまで』              守岡 知彦 (MORIOKA Tomohiko)
====================== Email: <tomo @ kanji.zinbun.kyoto-u.ac.jp> ======




More information about the APEL-ja mailing list