テキストエディットでUTF-8の書類が開けない

公開するパッケージに README ファイル (README.ja.txt) を含めて dmg ファイルを作ってみた。 ところが README.ja.txt をクイックルックで表示しようとしても、 テキストファイルのアイコンが表示されるのみ。 英文の README.txt は内容が表示されるのに。


テキストエディットのエラーメッセージ
テキストエンコーディング 日本語 (Mac OS) には対応していません。

しかも、 READE.ja.txt をダブルクリックしてもテキストエディットが開かない。 というか、 エラーメッセージを表示する。 どうもエンコーディングが 「日本語 (Mac OS)」 を期待して開こうとしたところ、 別のエンコーディングになっているから怒っているらしい。

たしかに UTF-8 で保存している。 なんで誤認識しているんだ? テキストエディットでなくて CocoaEmacs で文書を作成したせい?

テキストエディットの環境設定の 「開く/保存」 タブの 「標準テキストファイルのエンコーディング」 は 「自動」 に設定されている。 だから自動でエンコーディングを判別してくれるのではないの?

試しに README.ja.txt のエンコーディングShift_JIS にしてみたら、 今度はテキストエディットで開けた。

うーん、 Shift_JIS にするべきなのかな。 でもテキストエディットの環境設定で 「ファイルを開くとき」 のエンコーディングをカスタマイズしている場合はどういう動作をするのだろう。

それに Xcode で普通にファイルを作ると UTF-8 がデフォルトになる。 なので Xcode では UTF-8 でも表示できていたんだよね。 これはどうやら Xcode がプロジェクトの設定ファイルで、 このファイルはこのエンコーディングという情報を持っているみたいだ。

あと CVSリポジトリのコメントのエンコーディングUTF-8 で統一しているので、 格納するファイルのエンコーディングも統一しておきたいなあ。

ふと思いついて、 Xcode で README.ja.txt のエンコーディングUTF-8 に再変換して保存してみた。 そして Finder でダブルクリックしたところ、 今度は UTF-8 でも表示できた。 一体どういうことなのか。

そこでターミナルで ls -l README.ja.txt してみたところ、 拡張属性が付いていることがわかった。 そこで xattr してみると、

$ xattr -l README.ja.txt
com.apple.TextEncoding: utf-8;134217984

だそうである。 なんだ、 そういうことか。

そこで README.ja.txt をちょっと修正して CVS に commit してみた。 しかし cvs export すると拡張属性が取れてしまう。 どうも、 commit した時点ではずれている様子。 あたりまえか。

しかたがないので、 Makefile で頒布用 dmg を作る時に、 README.ja.txt と COPYING.ja.txt に

$ xattr -w com.apple.TextEncoding utf-8
するようにしてしまった。