日本語ファイル名があるディレクトリをTracのSVNリポジトリで見るとエラーが発生する場合の対処

こんにちは。arashoです。

TracでSVNのリポジトリブラウザを見ることはよくあると思います。
仕様書など日本語のファイル名のファイルなどをSVNで管理する事も良くあることだと思いますが、TracのバージョンやPythonのバージョンによっては日本語を含むファイルがあるSVNのディレクトリをTrac経由で見るとTracがエラーを起こすことがあります。
trac_error


環境は若干古めですがDebian Linux 3.1、Python 2.3、trac-0.10.4-ja-1でこの現象が発生しました。
エラーメッセージは

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe3 in position 0: ordinal
not in range(128)

とあるようですからやはり文字コード周りの問題のようです。asciiとあるのでスクリプトが実行されている際の文字コードがasciiなのでしょう。この部分を修正します。

/usr/lib/python2.3/site.py 内で

#encoding = "ascii" # Default value set by _PyUnicode_Init()
encoding = "utf-8" # Default value set by _PyUnicode_Init()

と修正をすると直ります。ただ、debパッケージに含まれるファイルを直接弄らなければならないのはちょっと管理上問題あるなぁと思います。設定ファイルとして上書きされないような仕組みならいいのですが、パッケージを更新して上書きされても気づかなそうなので。やっぱり普段使用しない言語でもある程度仕組みを知っておかないといけませんね。

同じファイル内に

# Remove sys.setdefaultencoding() so that users cannot change the
# encoding after initialization.  The test for presence is needed when
# this module is run as a script, because this code is executed twice.
#
if hasattr(sys, "setdefaultencoding"):
    del sys.setdefaultencoding

とあるので、site.pyが実行された以降で変更するのは基本的に不可能ですし、必要あればremoveしろというのも全てのスクリプトに影響が出るのでこれもどうかなという気もするのですが、そもそもasciiからutf-8に変えた時点で全てのスクリプトに影響が出てしまっているので今更だろ、と一人つっこみつつ堂々巡りをしてしまいました。

結果としては、

$ ls -l /usr/lib/python2.3/site.py
lrwxrwxrwx  1 root root 22 Dec  4  2006 /usr/lib/python2.3/site.py -> /etc/python2.3/site.py

との事なのでsite.pyを編集するのが正解なのかなとは思いますが、知っている人がいたら是非教えてください。

コメント / トラックバックはありません

コメントする