2009年2月27日金曜日

Emacs22の文字コード判別の頭が悪い

Emacs22から文字コードの判別にmule-ucsを使わなくなり起動が早くなったらしいが、そのせいで時々文字コードを間違えるようになったみたいだ。
写真は、二行目に「初音ミク」と書いてutf-8で保存されたものを開いた時のスクリーンショット。ステータス行を見ると、Shift-jisと誤認していることがわかる。こういう時は、C-x RET c utf-8-unix RET C-x C-v RETとタイプすればUTF-8で開き直せるが、あまりにも長すぎる。
以下のような行を入れておくことで、そのファイルの文字コードを指定できる。
# -*- coding:utf-8 -*-
(#はコメント。言語に合わせてセミコロンなどでも良)
これがファイル内にあれば、utf-8でファイルを読み込んでくれるようになるのだが、いちいち全部のファイルにこれを書くわけにはいかないし、何より読み込んでからでは遅い。

coding-category-listという変数の中に、文字コードの優先順位が書いてあり、先頭のほうが優先順位が高い。
coding-category-list
=> (coding-category-iso-8-2 coding-category-iso-7-tight coding-category-sjis coding-category-iso-7-else coding-category-iso-8-1 coding-category-utf-8 coding-category-utf-16-be coding-category-utf-16-le coding-category-iso-7 coding-category-iso-8-else coding-category-emacs-mule coding-category-raw-text ...)
確かに、coding-category-utf-8より前にcoding-category-sjisがある。
この優先順位を上げてやるといいらしい。以下の式を評価してから、問題のテキストファイルを開く。
(prefer-coding-system 'utf-8-unix)
=> (mule-utf-8 . mule-utf-8)
図のように、無事にutf-8と認識するようになったので、これを~/.emacs.my.elに追記しておく。
どうやら、coding-category-listを最初から順番に試していって、最初にファイル内全てを文字として表現できたものを問答無用で使うようになっているらしい。

# しかし、初音ミクで化けるとは・・・。

0 件のコメント:

コメントを投稿