From: Tanaka Akira Date: 2008-07-21T17:01:04+09:00 Subject: [ruby-dev:35617] rb_filesystem_encoding on Unix Unix で、単一の locale に従って運用している場合は、エンコー ディングをなにも指示しなくても適切に文字を扱えるよう動作する のがよいと思います。 つまり、 % date > xyzははは % ./ruby -e 'p Dir.entries(".").grep(/xyz/)' ["xyz\xA4\xCF\xA4\xCF\xA4\xCF"] でなく、 % ./ruby -e 'p Dir.entries(".").grep(/xyz/)' ["xyzははは"] となるのがよいのではないでしょうか。 プログラムを書く立場とすると、ファイル名を文字として正しく扱 えるようにする責任は、 * プログラムでなく、環境にある (ファイル名をひとつの locale に従って運用していることを仮 定する) という立場と、 * プログラム自身にある (locale に従っていないものもがんばって扱う) という両方の立場がありえますが、後者はどうせプログラム内でい ろいろな対処が必要なので、なにも指定しなければ前者を想定し、 前者の仮定が成り立つ限りにおいて文字をそのまま扱えるようにす るのが良いと思います。そうすれば、とりあえず前者の立場では幸 せになれます。 そのためには、システムから得たバイト列のファイル名には、とく に指定がない限り、locale encoding をつけるべきです。 % svn diff --diff-cmd diff -x '-u -p' encoding.c Index: encoding.c =================================================================== --- encoding.c (revision 18140) +++ encoding.c (working copy) @@ -967,7 +967,7 @@ rb_filesystem_encoding(void) #elif defined __APPLE__ enc = rb_enc_find("UTF8-MAC"); #else - enc = rb_ascii8bit_encoding(); + enc = rb_locale_encoding(); #endif } return enc; -- [田中 哲][たなか あきら][Tanaka Akira]