これはおそらく win32mbcs がファイル名のエンコーディングを得るのに
encoding.encoding を使ってるため、 0x5c を含む "能" の字で問題が出てる
のだと思います。encoding.encoding は本来はlocale に従った表示系
encoding なのを無理矢理使ってるのが問題。特に日本語Windows の場合は
locale が何であろうと mbcs アクセスは sjis となるはずですから。
ついでにいうと hg のAPIも msg を local encoded なテキストで渡すと言う
腐った仕様であることも絡んでますが。
# 再現させてみたのだけど、なぜか addremove では問題は出なかったです。
# commit の際に --encoding=utf-8 だと "機能拡張.sql" が除外されてしまう
# という不具合はありました。
> そうしたところ、質問主から個別にメールがあって:
>
> 日本語 Windows 環境なのだが、ログに日本語以外の文字も使いたいので、
> 日本語ファイル名と UTF-8 ログ符号化を両立させるにはどうすればよいか?
>
> ということらしいのです。
>
> これって何らかの方法で実現できますかね?
現状のままだと無理ではないかな。
win32mbcs を改造し、encoding.encoding を用いるのではなく、system や
python に問い合わせて windows の mbcs アクセスの際の encoding を得る
ようにするか、例えば win32mbcs.encoding=xxx のようなオプションで
明示できるようにすればいけるかと思います。
後者が簡単そう。
> 日本語 WIndows のファイル名符号化を UTF-8 化させるぐらいしか、
> 解決方法を思い付かないのですが、それってできるんでしたっけ?
これは fixutf-8 による方法ですね。新規ならアリですが既存のリポジトリに
対して途中で win32mbcs から乗り換えるのは無茶でしょうね。
--
Shun-ichi GOTO
あ、こっちにフォローするのを忘れてました。ゴメンナサイ。
> 「L10N な環境で I18N な運用」のようなケースは、結構盲点になりやすい
> (「tag 付けリビジョンのメッセージが翻訳対象になっていた」件など)ので、
> こうやって少しずつでも潰していければ良いですね。
ちなみに上記パッチはまだ crewにさえ入っていませんので、
使いたい人はパッチをあてるか、以下のメールの付ファイル
(win32mbcs.py ... 下のほうにある "URL:" のリンク)を使ってください。
http://www.selenic.com/pipermail/mercurial-devel/2009-December/017365.html
これまでとの変更点はHGENCODINGなどのUI系エンコーディング
指定とは別に win32mbcsが使うファイル名エンコーディングを
.hgrcで指定できるようになったことです。
日本語Windowsなどファイル名のエンコーディングが sjis で決まって
わけですから、以下のような設定で明示してやれば良いわけです。
[win32mbcs]
encoding = sjis
そうすればHGENCODINGや--encodingには好きな値を使うことが
できます。SJIS固有の0x5c問題を処理しつつ非SJISなログでの
コミットも可能、ということ。
指定しなければ今まで通りの挙動です(HGENCODINGなどに連動)。
# 本当はpythonに問い合わせてプラットフォームのファイル名
# エンコーディングを取得したいところなんだけどね。
このあたり、うまくすれば TortoiseHGとの相性もよくなるかも?
--
Shun-ichi GOTO