日本語ファイル名@Win と UTF-8 ログの併用

閲覧: 47 回
最初の未読メッセージにスキップ

フジワラ

未読、
2009/12/07 1:59:372009/12/07
To: mercurial-ja
フジワラです。

本家の ML に「日本語 Windows 上で日本語ファイル名が正しく扱えない」
という質問が投げられていたので、「日本語 Windows ではファイル名は cp932 で
符号化されているので UTF-8 指定は使えないよ」と回答してあげました。

http://www.selenic.com/pipermail/mercurial-devel/2009-November/016993.html

そうしたところ、質問主から個別にメールがあって:

日本語 Windows 環境なのだが、ログに日本語以外の文字も使いたいので、
日本語ファイル名と UTF-8 ログ符号化を両立させるにはどうすればよいか?

ということらしいのです。

これって何らかの方法で実現できますかね?

日本語 WIndows のファイル名符号化を UTF-8 化させるぐらいしか、
解決方法を思い付かないのですが、それってできるんでしたっけ?

風の噂で内部表現(IE 連携系?)は UTF-8 化していると聞いているのですが……

Shun-ichi GOTO

未読、
2009/12/07 2:48:062009/12/07
To: mercur...@googlegroups.com
2009年12月7日15:59 フジワラ <flying...@gmail.com>:

>
> 本家の ML に「日本語 Windows 上で日本語ファイル名が正しく扱えない」
> という質問が投げられていたので、「日本語 Windows ではファイル名は cp932 で
> 符号化されているので UTF-8 指定は使えないよ」と回答してあげました。
>
> http://www.selenic.com/pipermail/mercurial-devel/2009-November/016993.html

これはおそらく 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

フジワラ

未読、
2009/12/09 21:43:502009/12/09
To: mercurial-ja
フジワラです。

遅くなりましたが顛末報告。

GOTO さんが本家の方に対応パッチを投稿してくれたことで、無事解決しました。

http://www.selenic.com/pipermail/mercurial-devel/2009-December/017371.html

対応ありがとうございます! > GOTO さん

「L10N な環境で I18N な運用」のようなケースは、結構盲点になりやすい
(「tag 付けリビジョンのメッセージが翻訳対象になっていた」件など)ので、
こうやって少しずつでも潰していければ良いですね。

On 12月7日, 午後4:48, Shun-ichi GOTO <shunichi.g...@gmail.com> wrote:
> 2009年12月7日15:59 フジワラ <flying.fo...@gmail.com>:
>
>
>
> > 本家の ML に「日本語 Windows 上で日本語ファイル名が正しく扱えない」
> > という質問が投げられていたので、「日本語 Windows ではファイル名は cp932 で
> > 符号化されているので UTF-8 指定は使えないよ」と回答してあげました。
>
> >http://www.selenic.com/pipermail/mercurial-devel/2009-November/016993...

Shun-ichi GOTO

未読、
2009/12/09 23:56:462009/12/09
To: mercur...@googlegroups.com
2009年12月10日11:43 フジワラ <flying...@gmail.com>:

> GOTO さんが本家の方に対応パッチを投稿してくれたことで、無事解決しました。
>
> http://www.selenic.com/pipermail/mercurial-devel/2009-December/017371.html
>
> 対応ありがとうございます! > 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

全員に返信
投稿者に返信
転送
新着メール 0 件