Subversion で 文字コードの違うファイルを一緒に管理
開発するシステムの文字コードが utf-8 なのに、納品するマニュアルが LaTeX だったりして文字コードは euc-jp で書く必要がある場合の話。(いまどきは utf-8 で使える platex-utf8 があるらしいので、そちらを使っても解決するのだが、せっかく覚えたやり方なので)
最近は(subversion の日本語化が進んだおかげで)、trac + subversion 環境を使う事が多くなった。しかし、trac の「リポジトリブラウザ」で LaTeX のソースだけが文字化けしていたので、その解決方法を調べてみた。
調べたところ、Subversion はファイルの中身を関知しないという以下の記述を見つけた。(http://subversion.bluegate.org/doc/ch07s07.html 実は Google のキャッシュしか見えなかった。サーバ落ちてんのかなあ)
リポジトリはファイル名とログメッセージは UTF-8 であることを要求しますがファイルの内容にはまったく考慮 しません。 Subversion はファイルの内容を単なるバイト列の並びとして扱い、クライアント側もサーバ側もその内容のキャラクタセットやエンコーディングを理解しようとはしません。
つまり、クライアントである trac もファイルの中身は関知しないということになる。
しかし、偶然うまくいく方法を見つけてしまった。svn:mime-typeプロパティの設定である。試しに MimeType として text/plain と charsetとして euc-jp を設定してみる。
$ svn propset svn:mime-type 'text/plain; charset=euc-jp' index.tex
または、
$ svn propedit svn:mime-type index.tex
とやって、エディタで編集しても良い
その結果、trac の 「リポジトリブラウザ」でちゃんと文字化けせずに見えた。trac えらい。
さらに調べてみると…
text/plain で動くのは確認出来たけど、血液型 A型の僕としてはちょっと気になる。Google とかで検索して LaTex の MimeType を探してみた。 application/x-latex という記述があったので、それで試してみるが、application ということで、バイナリ扱いになる。で、svn コマンドの diff とかがうまく動かない。
あきらめずにさらに調べてみたら、text/x-tex が正しい様子。
$ svn propset svn:mime-type 'text/x-tex; charset=euc-jp' index.tex
これなら、trac でも文字化けしないし、svn diffでもうまくいくし、血液型A型でも気にならない。
