From: Nobuyoshi Nakada Date: 2008-01-23T19:45:18+09:00 Subject: [ruby-dev:33319] Re: Time#strftimeのエンコーディング なかだです。 At Wed, 23 Jan 2008 19:32:03 +0900, Nobuyoshi Nakada wrote in [ruby-dev:33317]: > > > とりあえずformat.encodingを無視するのはまずかろうと思われるので、 > > > 前者にしておきました。strftimeが非ASCIIを返すことがあるとしても、 > > > strftimeの終了時にはすでにformatと混じってしまっているわけで、ど > > > うしたもんでしょうね。 > > > > strftime(format.encode(locale)).encode(format.encoding) > > という感じでstrftimeにはlocaleのencodingでわたして > > Time#strftimeの返値はformatのencodingになっていると > > うれしい気がするのですが、どうでしょうか? > > こんなとこですか。 > > $ ./ruby --arch=.i386-mingw32 -Ke -ve 'p Time.now.strftime("\xc6\xfc\xcb\xdc/%Z")' > ruby 1.9.0 (2008-01-23 revision 15187) [i386-mingw32] > "日本/東京 (標準時)" ちなみに、Windows-31J(CP932)の変換は未対応ですが、日本語版 Windowsではかなり困るのでShift_JISと同じにしてごまかしてあります。 Index: enc/trans/japanese.c =================================================================== --- enc/trans/japanese.c (revision 15187) +++ enc/trans/japanese.c (working copy) @@ -4428,4 +4428,9 @@ rb_from_SHIFT_JIS = { NULL, NULL, }; +static const rb_transcoder +rb_from_Windows_31J = { + "Windows-31J", "UTF-8", &from_SHIFT_JIS, 3, 0, + NULL, NULL, +}; static const unsigned char @@ -13358,4 +13363,9 @@ rb_to_SHIFT_JIS = { NULL, NULL, }; +static const rb_transcoder +rb_to_Windows_31J = { + "UTF-8", "Windows_31J", &to_SHIFT_JIS, 2, 1, + NULL, NULL, +}; static const unsigned char @@ -23861,6 +23871,8 @@ Init_japanese(void) { rb_register_transcoder(&rb_from_SHIFT_JIS); + rb_register_transcoder(&rb_from_Windows_31J); rb_register_transcoder(&rb_from_EUC_JP); rb_register_transcoder(&rb_to_SHIFT_JIS); + rb_register_transcoder(&rb_to_Windows_31J); rb_register_transcoder(&rb_to_EUC_JP); rb_register_transcoder(&rb_from_ISO_2022_JP); -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦