This manual describes how to manipulate Japanese character coding or non-ASCII MIME codings by DeleGate.
DeleGateにおける日本語文字コードおよびMIMEコード変換機能
オリジナル: http://www.delegate.org/delegate/doc/jpconv.htm
June 9, 2004, Yutaka Sato

DeleGateに内蔵されている、入力テキストの文字コードを変換して出力する機能と、 MIMEのエンコーディングを変換する機能の使用方法について説明する。

1. 概要

2. 文字コード変換

DeleGateの入力側の文字コードは自動的に認識(推定)される。 出力側の文字コードを指定するのが CHARSET パラメタで、以下のように指定する。

文字コード名の前にオプションで前置される "a-" や "r-" は、文字コードに よらず共通に適用できる変換を指定する。 文字コード名としては以下のものが指定できる。これらの名前は、 大文字/小文字のどちらで指定しても良い。 UTF-8への変換のためには、マッピング用テーブルを必要とするが、このための データファイルは、DeleGateを CHARSET=utf-8 指定付きで最初に実行した時に、 http://www.delegate.org/delegate/codemap/ から自動的にダウンロードされ、DGROOT/lib にキャッシュされる。

文字コード変換がMIMEメッセージやHTTPメッセージに適用された場合、そのボディ のテキストの文字コードが変換されるとともに、ヘッダ中のContent-Typeに指示され ている文字コードパラメタ(charsetパラメタ)の値として、CHARSETに指示された 文字コード名が指示される。

CHARSET=guess は、HTTPヘッダ中のContent-Typeに(charsetパラメタで) 文字セット名が指示されていない場合にのみ意味を持ち、 入力テキストから推定した文字コード名をそこに出力する。
(例: Content-Type: text/html → Content-Type: text/plain; charset=EUC-JP)
最近のウェブブラウザは「日本語版」でなくても、各種日本語コードを解釈・表示 することができる。ただそのためには、charsetパラメタに文字コード名が明示 されている必要がある。しかし、日本語テキストを提供するサーバ側では、 charsetパラメタを設定していない場合が少なくない。そのような場合に対処する ために、クライアント側のプロキシサーバやサーバ側のゲートウェィサーバ (リバースプロキシ) において、この CHARSET=guess を使用する。

3. MIMEコード変換

DeleGateをプロキシサーバとして使用する場合には、MIMEコード変換機能は デフォルトで無効になっており、 MIMECONVパラメタを明示的に指定するか、CHARSETパラメタを指定する (文字コード変換機能を有効にする)ことで、MIMEコード変換が有効になる。 一方DeleGateをMIMEコード変換コマンドとして使用する場合には(当然)、 MIMEコード変換は有効になっている。

MIMEデコードでは、ネット上での転送用の外部形式から、内部での処理用の 形式への変換を行う。 MIMEエンコードでは、内部での処理用の形式から、ネット上での転送用の 外部形式への変換を行う。 文字コード変換が必要なボディが(BASE64またはQuoted-Printableで)エンコード されていた場合には、変換の前にそれらがデコードされる。

このMIMEコード変換(および文字コード変換)は、RFC822メッセージ全体だけ でなく、 マルチパートで構成されているMIMEメッセージ中の各パートのヘッダや、 text型のパートのボディに適用される。

HTTPに対する変換でサポートしている CHARSET=guess は、ここでは未実装。

4. 使用例

4. 経緯

これまで10年間のDeleGateの開発を通じて、DeleGateの文字コード変換やMIME変換 機能をまとめたドキュメントをこれまで書いたことがない。 これはただのサボりでもなく、特に文字コード変換機能については極めて短い期間 に過渡的にしか必要とされないだろうと考えていたことにもよる。 実際、最近ではすっかり、各種文字コード変換機能やMIME変換機能は 各種プログラムに組み込みとなって、外部で変換してやる必要があることは 少なくなった。

ところが最近になって、私自身がとある全文検索エンジン (Freya, 既に数年前に開発が終了している)の前処理のためにこれを使う必要が起こり、 文字コード変換機能の拡張が必要になった。 そこで、上記の CHARSET の a- や r- という機能を今回の版(DeleGate/8.9.5)に 追加したのを機に、日本語に関わる変換機能についてこの書きものにまとめた。

これら変換機能のデフォルト値は、DeleGateの開発過程の中で、変換の必要性が 変化したり、また海外への配布を前提にするために、 途中で変更された経緯があり(特に6.0以降)、 自分でもはっきり覚えていなかった部分があった(特にMIMECONV)。 利用者にはなおさら、仕様が不明であったに違いない。。。