cygwin 1.7.1 で ja_JP.SJIS の時に subversion で global-ignores=*~ と指定しても効果がない

cygwin 1.7.1 を LANG=ja_JP.SJIS で使用している時に、~/.subversion/config に以下のような記述をしても効果がありません。

global-ignores = *~

少し調査してみた結果、ja_JP.SJIS 環境ではファイル名の ~ (U+007E TILDE) が (U+203E OVERLINE) へ化けるようですす。

ですので、とりあえずアドホックに回避するには以下のようにしておくと良いでしょう。

global-ignores = *~ *‾

その上で ~/.subversion/config を UTF-8 で保存しておく必要があります。


(1/22 追記)

ソースを眺めたところ、 LANG=ja_JP.SJIS の場合、nl_langinfo(CODESET) が "SJIS" を返します。したがって、apr/misc/unic/charset.c の apr_os_locale_encoding() も "SJIS" を返します。

その文字列がめぐりめぐって apr_util/xlate/xlate.c の apr_xlate_open() へ渡り、その中の iconv_open() へ渡ります。

iconv は SJIS だけではなく CP932 もサポートしていますから、nl_langinfo(CODESET) が "CP932" を返すように、LANG=ja_JP.CP932 に設定するのがもっとも正しい解決だと言えます。

しかし cygwin 1.7.1 では SJIS と CP932 を同一視しており、ja_JP.CP932 に設定することができません。



  • なお、LANG=ja_JP.UTF-8 で使用している時は問題なく使用可能です。
  • また、LANG=ja_JP.SJIS 環境では、~ を含むファイル名のファイルを commit すると、ファイル名が として commit されてしまうことになると思われるので注意する必要があります。他にもこのような問題が起こる文字はありそうです。
  • 従来の文字コードとUnicodeの対応に関する諸問題