先日emacsでハマりました。

あるShift JISで書かれたHTMLファイル群があり、それを再編集しなければならなかったのですがとりあえず新たに開発するシステムのテンプレートのコードがeuc-jpなので、

find . -name \*.html -exec perl -MJcode -pi -e '$_ = Jcode->new($_)->euc' {} \;

などで一括変換をしました。そして変換したファイルをemacsで読みこんだところ、ステータスのところにはEESと出ています。eucのコードになっていれば、EEEとなるはずなのに…。しかもところどころ文字化けとかしてなにかおかしい。でもjlessとかもしくは、windowsやmacのエディタで開いても特に文字化けしない。

ということで、そのファイルをよくよく調査してみたら

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

という記述が先頭に入っているためらしいということがわかりました。要するにemacsのHTMLモードだとこの行を判定してcharsetを推測してくれるらしいので、euc-jpなファイルをShift_JISで表示しようとして文字化けてるということみたいです。なのでcharset=euc-jpに変更したら無事文字化けせずに開けました。

便利なんだか便利じゃないんだか…。ここは人が気を付けないといけませんね。