From: Fujioka Date: 2008-09-04T09:40:48+09:00 Subject: [ruby-dev:36146] Re: [Feature #542] cgi.rb : CGI::unescape return encoding 藤岡です。 Fujioka wrote: >> CGI::unescapeは現在は引数のencodingでforce_encodingするように >> なっていますが、ascii_only?がtrueの場合はUS-ASCII、 >> falseの場合はASCII-8BITを返すのがいいと思います。 > > ascii_only? なときに US-ASCII を返すのはいいと思うのですが、 > false なときに ASCII-8BIT はまずいですね。 > > HTTP ヘッダで charset を指定されつつ escape されて渡された場合、 > とりあえず escape された文字列にその charset をつけ、 > その後に unescape するってのはそれなりにありうる流れなので。 > クエリを渡された場合はそのクエリにencodingをつけて unescapeするのではなくて、unescapeをしてから encodingをつけるのが順番としては正しいと思います。 クエリは通常はascii文字列のはずなので、 それにencodingをつける方が間違っていると思います。 ただ、今思っているのはASCII以外はASCII-8BITになるのは あんまりだと思っていて、CGI.newしたときにオプションで 期待するencodingを渡してあげれば 自動的にUS-ASCIIかそれ以外の場合はそのencodingにforce_encodingして あげる機能が欲しいと思っています。 まだ抗争中ですが。 > Ruby M17N では、一連の処理の結果の encoding を指定する際に、 > 引数の String#encodig を用いるということはしばしば行われます。 > unescapeはasciiからasciiかどうかわからない文字列へのフィルタなので 引数のencodingはあてにできないと思っています。