藤岡です。

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はあてにできないと思っています。