Kanji Filename Handling

Back to Mew Page or Top
 
NOTICE!
本コードはMew本体の動作を変更し、
本来RFC違反であるものを、利便性のために有効にするものです。
御自分の責任において使用していただくようお願いいたします。

本コードを使用することで発生する障害は Mew本体とは関係ありませんので、
苦情、要望、質問等は こちらにお願いします。


Abstract

mew-fake-cdp.elは、 漢字ファイル名で添付されたファイルを Mew で扱えるようにするためのコードです。 また、ファイル名がContent-Type:ヘッダのname= パラメータでのみ指定された場合の対応や、 Content-Disposition:の値をファイル名として利用することもできます。 ただし、Mewで漢字ファイル名での添付ファイルを送れる ようにするものではありません。


Why is this code requred?

電子メール等において、 一般に「添付ファイル」といわれるMIME attachmentが 広く使われています。 現在この添付ファイルのファイル名を伝える方法は以下のものが使われています。

上記のうち前者(name=)は現在は使われるべきではありませんが、 いくつかのMUAでは依然として前者のみを使用しているもの (例えばcc:MailやLotus Notesなど)や、 Windows上のいくつかのMUAは(互換性を考慮してか) 両者を付加しているものもあります。 MIME的には後者のみであるべきであり、 Mewは後者(filename=)のみを受け付け、 前者(name=)を無視します

また、filename=で使用する文字コードは厳密にはASCIIである必要があ るにもかかわらず本文でも使用しているコード(ISO-2022-JP)をそのま ま使用したり、Messageヘッダでのエンコード(B-encode, Q-Encode)を パートヘッダでも使用することを自然な拡張(?) として使用すること で、漢字ファイル名のファイルを送るMUAが増え、実際多くのやり取り が行われています。これはつい最近(RFC-2184,RFC-2231)まで漢字ファ イル名をやり取りする具体的な取り決めが提供されなかったための、苦 肉の独自拡張といえます。RFC-2231としてエンコーディングの取り決め られた現在はこれに従う必要があるのですが、実際にはこれが実装され ているMUAは皆無(*1)で、従来の独自拡張(raw-JIS, B-Encode, Q-Encode)で 流通しているのが現状です。

さて、上記のように、Mewではname=で指定されたファイル名を理解しません。 また、filename=で指定されていてもB-enc/Q-enc されたファイル名をデコードしません。 それはそれでMIMEに対する厳密さとして良いことなのですが、 実際に漢字ファイル名で送られてきた場合、 その添付ファイルをセーブしようとすると、 例えば "=?ISO-2022-JP?B?GyRCNEE7ehsoQg==?=.txt" などといったファイル名となってしまい非常に不便です。 本コードはMewのsyntax解析結果をさらに加工し、 あたかもMewが柔軟な対応をしているかのように振る舞わせるためのコードです。

*1) Mew は 1.94 beta 6 より RFC2231のサポートを行なうべくコード の実装を開始しました。現時点(99/02/16)ではまだ試験段階です。

What the code does

本コードを使用することで、添付ファイル名の扱いは以下の手順で行われます。

  1. Mewのオリジナルのsyntax解析を行う。
  2. Content-Disposition: フィールドがあり、filename=パラメータが 存在すれば、その値をファイル名として使用する。
  3. 上記 1が存在せず、Content-Type: フィールドがあり、 name=パラメータが存在すれば、その値をファイル名として使用する。
  4. 上記 1, 2が存在せず、Content-Description:があれば、 その値をファイル名として使用する(オプション指定)。
  5. ファイル名がJIS(iso-2022-jp)であればこれを文字列にデコードする。
  6. ファイル名がB-enc/Q-encであればデコードする。
  7. ファイル名が含んでいる空白文字を取り除く(オプション指定)。
  8. MewのシンタックスベクタのContent-Disposition:(CDP:)フィールド を書きかえる。エントリが無ければ作成する。

これにより、以下の機能を提供します。

補足:

また、Mewは1.94b6から RFC2231のエンコーディングのサポートを実装 し始めましたが、これとの機能的な衝突は今のところありません (mew-1.94b6時点)ので、RFC2231の漢字ファイル名はmewが、それ以外の ものは従来どおりmew-fake-cdpが処理することが出来ます。

How to use

本コードではMewの解析関数であるmew-decode-mime-header<f>を 拡張します。そのため、Mewがロードされた後、 mew-fake-cdp-setup<f>を呼び出して組み込みを行います。具体 的には以下のコードを~/.emacsに加えます。


	  (eval-after-load "mew" '(load "mew-fake-cdp"))
	

あるいは M-x load-library mew-fake-cdp としても良いでしょ う。ファイルがロードされた時点から機能が使用できますので、あとは いつもどおりMewを使用してください。


Test Environment

本コードは以下の環境で動作確認しています。

それ以外の環境でも動作するものと思われますが、保証するものではあ りません。御連絡いただけ ればある程度の対応は可能です。また、今後のバージョンでのMew本体 のコード変更により正常に動作しなくなる可能性があることを御了承く ださい。質問、要望などがございましたら こちらまで、お願いします。
また、本コードはMewの一部ではありませんので、くれぐれも mew-distに苦情等を投げたりしないよう願いいたします。


Update Log


      revision 1.13
      date: 1999/02/19 04:42:44;  author: gotoh;  state: Exp;  lines: +78 -70
      * Adapt to new syntax also in raw JIS decoding.
      * Catch errors in fake code and warn to user.
      ----------------------------
      revision 1.12
      date: 1999/02/18 17:53:24;  author: gotoh;  state: Exp;  lines: +38 -6
      * New advice of mew-param-analyze (for mew-1.94b6 or later)
      * Support quoted multi-lined value (for mew-1.94b6 or later).
      * Add activiate/deactivate command:
        mew-fake-cdp-activate and mew-fake-cdp-deactivate.
      ----------------------------
      revision 1.11
      date: 1999/02/16 09:33:10;  author: gotoh;  state: Exp;  lines: +43 -29
      * Support new syntax format in mew-1.94b6.
      * Use ADVICE  ... see description in file
      ----------------------------
      revision 1.10
      date: 1999/02/16 06:37:41;  author: gotoh;  state: Exp;  lines: +3 -1
      * Function mew-syntax-get-member is obsoleted in mew-1.94b6.
      ----------------------------
      revision 1.9
      date: 1998/11/23 07:34:19;  author: gotoh;  state: Exp;  lines: +8 -5
      * Raw-JIS CD: was not put back into syntax. (So displayed as ^[$B... )
      ----------------------------
      revision 1.8
      date: 1998/11/23 05:35:01;  author: gotoh;  state: Exp;  lines: +20 -4
      * [BUG fix] No decoding twice for Japanese CD: (error: not character boundary)
      * add new func: mew-fake-cdp-find-cs-string
      ----------------------------
      revision 1.7
      date: 1998/11/10 06:10:16;  author: gotoh;  state: Exp;  lines: +25 -4
      * Walk around of mew-header-sanity-check-string for raw-JIS filename.
      ----------------------------
      revision 1.6
      date: 1998/06/01 10:02:23;  author: gotoh;  state: Exp;  lines: +9 -7
      * Easy mistake; filename is not right if ascii and enc-word co-exist.
      ----------------------------
      revision 1.5
      date: 1998/05/28 13:52:01;  author: gotoh;  state: Exp;  lines: +5 -2
      BUGFIX: to support mule for win
      ----------------------------
      revision 1.4
      date: 1998/05/28 13:42:01;  author: gotoh;  state: Exp;  lines: +16 -19
      mew-1.93b36 support
      ----------------------------
      revision 1.3
      date: 1998/03/13 10:44:59;  author: gotoh;  state: Exp;  lines: +19 -9
      BUG-FIX when CDP: is specified correctly and B-Enc'ed.
      Add switch to use CT: name= (default is t)
      Add switch to remove spaces in filename (default is nil)
      ----------------------------
      revision 1.2
      date: 1998/03/13 09:29:15;  author: gotoh;  state: Exp;  lines: +40 -16
      Add CD: support (optional)
      ----------------------------
      revision 1.1
      date: 1998/03/13 08:31:19;  author: gotoh;  state: Exp;
      Initial revision