From: "U.Nakamura" Date: 2008-07-04T01:53:25+09:00 Subject: [ruby-dev:35345] Re: Win32 Unicode console output こんにちは、なかむら(う)です。 In message "[ruby-dev:35343] Re: Win32 Unicode console output" on Jul.04,2008 01:15:04, wrote: | > とりあえず、次はGetCommandLineW()だろう、と思ってコードを見な | > がら考えたのですが、当たり前ですがコマンドライン引数の解釈が | > 終わるまでdefault_externalは確定できないのでした。 | > | > 一度GetCommandLineA()で解釈した後、default_externalが決まった | > らやりなおすのかなあ。できるんだろうか。 | | GetCommandLineW() で解釈して、default_external に | 変換すればいいんじゃないですかね。 | | GetCommandLineA() では Windows がやっていることを、 | Ruby の側でやるように変えるだけかな、と。 えーと、WindowsというかCスタートアップルーチンが作成してくれ るargc,argvはmswin32(など)では使ってません。 つまり、現状既にGetCommandLineA()で取得した内容を自前で解釈し ています。 詳しくは、win32/win32.cのrb_w32_sysinit()と、そこから呼ばれる rb_w32_cmdvector()を参照していただけるとわかるかと。 で、この際にrubyが持っているglobbingルーチン群を利用してワイ ルドカード類の展開を行っています。 以上から、さしあたってそびえている壁は、 (1) どのタイミングでGetCommandLineW()から取ってきたargc,argv への差し替えを行うかの判断。 (2) rb_w32_cmdvector()の非コードページエンコーディング対応。 (3) globbingルーチン群の非コードページエンコーディング対応。 ということになるかと思います。 ずっと目をそむけていたのですが、思いのほか早くglobbingの多言 語対応の必要性が目の前に出てきましたねえ... それでは。 -- U.Nakamura