トップ «前の日記(2007-05-31) 最新 次の日記(2007-06-10)» 編集

ORCA愉快日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|10|11|12|
2012|01|02|09|
2013|04|

2007-06-05 Sylpheedで文字コード変換エラーを出してしまった

_ [Linux] Sylpheedで文字コード変換エラーを出してしまった

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

_ [Linux] UTF-8のBOMをバイト列で見てみる

上記の、nkfコマンドの-wと-w8オプションで、BOM文字列の追加が異なるのを実際に試してみた。

□ サンプル文字列(元は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のバイト列が先頭に追加されているのが
確認できた。

トップ «前の日記(2007-05-31) 最新 次の日記(2007-06-10)» 編集