29 September
2007

Subversion で 文字コードの違うファイルを一緒に管理

というよりも、trac での文字化け対策 :-)

開発するシステムの文字コードが 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型でも気にならない。

Posted by Satoshi at 16:43 | Comments (0) | Trackbacks (0) | このエントリーを含むはてなブックマーク
Comments
There is no comment.
Trackbacks
Please send trackback to:http://www.randynetwork.com/blog/263/tbping
There is no trackback.