UTF-8なEtch環境でSylpheedを触っていたら、「メッセージ本文の文字エンコーディングをUTF-8からISO-2022-JPに変換できません。」という文字コード変換エラーを出してしまった。これは、ISO-2022-JPに変換できない文字列が含まれているために起こるわけで、メール本文そのものや、他の環境から持ってきた署名ファイルや、テンプレートが原因で起こることが多そうだなー。これを解決するためにググってみたら、UTF-8のBOM(バイトオーダーマーク)が問題じゃないの? というMLのエントリを見付けたので、署名ファイルなどを、nkf -wオプションで変換しなおして、BOMなしのUTF-8に変換したらうまくいった。
□ 文字コード変換エラー時に表示されるメッセージ □ nkfの-wオプションと-w8オプションの違い man nkfより抜粋 ---------------------------------------------- -w -w8[0] -w16[BL][0] Unicode を出力する。 -w -w80 UTF8 コードを出力する。 (BOM 無し) -w8 UTF8 コードを出力する。 ---------------------------------------------- 実際の作業は、Sylpheedなどであれば signatureファイルをもってきて $ nkf -w --overwrite ~/Mail/.signature* みたいな感じにして署名ファイルをUTF-8に変換すればいいでしょう。 □ 参考URL man nkfなども参照のこと。 @IT - XML用語辞典 BOM http://www.atmarkit.co.jp/aig/01xml/bom.html Wikipedia - Byte Order Mark http://en.wikipedia.org/wiki/Byte_Order_Mark
□ サンプル文字列(元はEUC-JP) ------------------------------------------- Taro Yamada / 山田 太郎 E-Mail: yamada@example.com ------------------------------------------- □ hexによる文字コードの比較 # aptitude install hex 1.EUC-JPな文字列 user@etch:~$ hex signature 0x00000000: 54 61 72 6f 20 59 61 6d - 61 64 61 20 2f 20 bb b3 Taro Yamada / �� 0x00000010: c5 c4 20 c2 c0 cf ba 20 - 0a 45 2d 4d 61 69 6c 3a �� ��Ϻ JE-Mail: 0x00000020: 20 79 61 6d 61 64 61 40 - 65 78 61 6d 70 6c 65 2e yamada@example. 0x00000030: 63 6f 6d 0a - comJ 2.BOMなしのUTF-8文字列に変換した場合(nkf -w) user@etch:~$ hex signature.w 0x00000000: 54 61 72 6f 20 59 61 6d - 61 64 61 20 2f 20 e5 b1 Taro Yamada / �� 0x00000010: b1 e7 94 b0 20 e5 a4 aa - e9 83 8e 20 0a 45 2d 4d ��.. 太�.. JE-M 0x00000020: 61 69 6c 3a 20 79 61 6d - 61 64 61 40 65 78 61 6d ail: yamada@exam 0x00000030: 70 6c 65 2e 63 6f 6d 0a - ple.comJ 3.BOMありのUTF-8文字列に変換した場合(nkf -w8) user@etch:~$ hex signature.w8 0x00000000: ef bb bf 54 61 72 6f 20 - 59 61 6d 61 64 61 20 2f ��.Taro Yamada / 0x00000010: 20 e5 b1 b1 e7 94 b0 20 - e5 a4 aa e9 83 8e 20 0a 山�.. 太�.. J 0x00000020: 45 2d 4d 61 69 6c 3a 20 - 79 61 6d 61 64 61 40 65 E-Mail: yamada@e 0x00000030: 78 61 6d 70 6c 65 2e 63 - 6f 6d 0a xample.comJ 上記のように、UTF-8だと「EF BB BF」のBOMのバイト列が先頭に追加されているのが 確認できた。