Cygwin のパス名符号化が UTF-8 化
Emacs(Meadow) 経由で "hg commit" しようとしたら、何故かエラーで中断される。あれ?何がまずいんだ?
"hg status" してみると、最近全く触った覚えの無いファイルが missing("!") 扱いになっている。おまけに、これまた全く身に覚えの無いファイルが unknown("?") 扱いで表示されている。
よくよく見ると、missing なファイルは日本語ファイル名で、unknown なファイルはファイル名こそ文字化けしているけど、どうも missing なファイルと同じパスっぽい。
missing なファイルは:
という状況。
ってーことは、ファイル名の符号化方式が cp932 から変わったってことで良いのかな? ls の出力をファイルにリダイレクトして開いたら、文字コードが utf-8 になっていたので、多分これが正解なのだろう。
ウェブの大海を彷徨うことしばし。どうやら Cygwin の 1.7 版からは、locale 対応機能を頑張っているらしく、そのついでにデフォルト設定を UTF-8 にしてくれちゃったらしい。昨日のごたごたで Cygwin を update したのが原因だったのね.... orz
試しに "export LC_CTYPE=ja_JP.cp932" した上で ls すると....おぉ!日本語ファイル名が正しく表示される!
以前から:
Windows のファイル名内部表現形式は既に UTF-16 されているけど、旧来の API が各国固有の符号化方式をベースにしているためにアレな状況になっている
らしいという話は聞いていたので、あるべき姿に進みつつある、ということなのかな?
とりあえず、現状の自分の環境は cp932 を前提に設定しているので、Windows の環境設定で LC_CTYPE 環境変数を ja_JP.cp932 にすることに。すると、"hg status" 様の怒りも静まった模様(笑)。
後は Meadow がファイル操作に unicode ベースな API を使うようになれば(既に使ってる?)、一気に utf-8 化できるなぁ。もっとも、既存のリポジトリに関しては文字コード中立な格納になっていないから、新規作成のものに限定されてしまうけどね > mercurial
そういえば、TortoiseHg のファイル名符号化方式は、エクスプローラとの連携方式に依存する筈だけど、あそこは元々何を使っているのかなぁ? UTF-8 ? CP932@日本語Win ?