On 2009/02/14 20:59, NARUSE, Yui wrote:
> 成瀬です、
>
> Nobuyoshi Nakada wrote:
>> なかだです。
>>
>> At Sat, 14 Feb 2009 12:51:57 +0900,
>> MOROHASHI Kyosuke wrote in [ruby-dev:38005]:
>>> Ruby 1.9.1p0で、URI.decode()がうまく動かないようです。
>>> 一文字ずつデコードされるため(?)、マルチバイト文字を復元できていません。
>>>
>>> $ ruby19 -Ku -ruri -ve 'p ["日本語".dump, URI.unescape( URI.escape("日本語") ).dump]'
>>> ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-darwin9]
>>> ["\"\\u{65e5}\\u{672c}\\u{8a9e}\"",
>>> "\"\\u{e6}\\u{97}\\u{a5}\\u{e6}\\u{9c}\\u{ac}\\u{e8}\\u{aa}\\u{9e}\""]
>> UTF-8決め打ちはまずいと思いますが、こういう場合って
>> default_externalでいいんでしょうか。

escape の場合、引数のエンコーディングから UTF-8 に変換して、その後バイト 
語とに %-encoding するのは筋だと思います。第二引数では UTF-8 意外のエン 
コーディングが指定できるといいと思います。default_external はあくまでも 
「ここの計算機のプログラムの外のエンコーディングであって、Web に通用する 
ものではありません。

unescape の場合は %-encoding を解けた後の想定するエンコーディングと、結 
果のエンコーディングの二つを考える必要がある。前者については、バイトパ 
ターンが UTF-8 に準拠したら UTF-8、そうでなかったら ASCII-8BIT、別に指定 
があったらそのエンコーディング、でいいと思います。このとき、「一部分が 
UTF-8 準拠、一部分は違う」の問題がありうる。その場合「全部 ASCII-8BIT」 
と「UTF-8 のところを unescape、残りを % のまま」の選択肢が考えられる。
後者の「結果のエンコーディング」は前者が ASCII-8BIT の場合 ASCII-8BIT し 
かないが、後 default-internal と指定されたエンコーディング (前者と同様又 
は違う(1)) が考えられる。

(1) の例: あるサーバで SJIS が使われているので前者には SJIS が必要だけ 
ど、プログラム内は EUC-JP に統一されているのは応用例として考えられます。

> 基本的には引数のエンコーディングがいいのですかねぇ。
> で、US-ASCII だった場合は UTF-8 で。
>
> Martin さんどう思われますか?

意見が遅くて申し訳ございません。この操作をどのぐらい IRI <-> URI の変更 
のためだと考えられるかと思います。その場合、全体的な変換にはメソッド名と 
して URI.to_IRI とか URI.to_URI/from_IRI (IRI クラスが別に必要でしたら 
IRI.to_URI) 等の方がいいのではないかとも思います。しかしその変換はただの 
%-encoding よりもう少し複雑、しかも現在検討中です。

よろしくお願いします。   Martin.
-- 
#-# Martin J. Drst, Professor, Aoyama Gakuin University
#-# http://www.sw.it.aoyama.ac.jp   mailto:duerst / it.aoyama.ac.jp