Rmailは、Emacsがファイルをvisitしたりサブプロセスの出力にたいして行なうように、非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の内部文字セットで読み書きされます)。