Rmailは、Emacsが参照するファイルやサブプロセスの出力に対して行うのと同様に、ASCII以外の文字を含むメッセージを自動的にデコードします。Rmailは、メッセージ内に標準の‘charset=charset’ヘッダーが存在する場合、それを用いて送信者がどのようにメッセージをエンコードしたかを判断します。charsetを対応するEmacsコーディングシステム(コーディングシステムを参照)にマッピングし、そのコーディングシステムを用いてメッセージ本文をデコードします。メッセージヘッダーに‘charset’の指定がない場合、またはcharsetが認識されない場合、Rmailは通常のEmacsのヒューリスティックとデフォルトに従ってコーディングシステムを選択します(コーディングシステムの認識を参照)。
まれに、‘charset’ の指定がないため Emacs
が誤ったコーディングシステムを推測したか、あるいは指定が不正確であったために、メッセージが正しくデコードされないことがあります。例えば、設定に不備のあるメーラーが、実際には
koi8-r でエンコードされているメッセージを ‘charset=iso-8859-1’
ヘッダー付きで送信してしまうといったケースが考えられます。メッセージ本文が文字化けしていたり、一部の文字が16進数コードや空白のボックスとして表示されたりする場合、このような事象が発生した可能性があります。
正しいコーディング方式を特定または推測できれば、その方式を用いてメッセージを再デコードすることで問題を修正できます。これを行うには、M-x rmail-redecode-bodyコマンドを実行してください。このコマンドはコーディング方式の名前を読み取り、指定した方式を用いてメッセージを再デコードします。正しいコーディング方式を指定していれば、結果は読み取り可能になるはずです。
Rmailで新しいメールを受信すると、各メッセージは、あたかも個別のファイルであるかのように、記述に使用されている符号化方式から自動的に変換されます。この際、指定した符号化方式の優先順位リストが使用されます。MIMEメッセージで文字セットが指定されている場合、Rmailはその指定に従います。Rmailファイル自体の読み書きには、Emacsは変数
rmail-file-coding-system で指定された符号化方式を使用します。デフォルト値は
nil
であり、これはRmailファイルが変換されない(Emacs内部の文字コードで読み書きされる)ことを意味します。