From: Yukihiro Matsumoto Date: 2009-01-08T18:06:15+09:00 Subject: [ruby-dev:37738] Re: Encoding.locale_charmap まつもと ゆきひろです In message "Re: [ruby-dev:37737] Encoding.locale_charmap" on Thu, 8 Jan 2009 17:45:45 +0900, Hidetoshi NAGAI writes: |Ruby/Tk で,locale の encoding を得るために |Encoding.find(Encoding.locale_charmap) なんてことをしていたのですが, |Encoding.locale_charmap が空文字列を返すことがあるようです. locale_charmapのソースは以下の通りですから、これが空文字列を 返すのであれば、nl_langinfo()が空文字列を返しているのだと思 います。それってのは正常な状態ではないでしょうが、Rubyからな んとかできることでもなさそうです。 VALUE rb_locale_charmap(VALUE klass) { #if defined NO_LOCALE_CHARMAP return rb_usascii_str_new2("ASCII-8BIT"); #elif defined HAVE_LANGINFO_H char *codeset; codeset = nl_langinfo(CODESET); return rb_usascii_str_new2(codeset); #elif defined _WIN32 return rb_sprintf("CP%d", GetConsoleCP()); #else return Qnil; #endif } |これは正常な状態でしょうか. |正常であるなら,どのような場合にそうなるのでしょうか. むしろこっちが聞きたいです。どんな環境下で空文字列が得られた のでしょうか。 |locale_charmap が空文字列を返した場合には, |locale はどのように解釈すれば良いでしょうか.( "US-ASCII" ? ) | |そもそも,locale の encoding を得るのに |Encoding.find(Encoding.locale_charmap) なんてことをしているのが |根本的に勘違いをしているのでしょうか. ソースを見ればわかるように、locale_charmapはnilを返すことはあ りえます。また、nl_langinfo はEncodingとは独立に定義されてい ますから、該当するEncodingが存在しないこともありえるでしょう。 いずれにしてもそのような場合にはUS-ASCIIかASCII-8BITくらいし か使えないのではないでしょうか。 まつもと ゆきひろ /:|)