From: Martin Duerst Date: 2007-12-12T19:39:46+09:00 Subject: [ruby-dev:32555] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. 松本さん、中田さん、こんにちは。 文字コード変換の新しい機能をテストしたところで一つの わりと根本的な問題に気がつきました。 (もっと早く気がつくはずでしたが、assert_equal の順番が間違っていました)。 例えば "D\u00FCrst".encode('iso-8859-2') の文字コード変換 をテストしたいと思いますと、テストとして assert_equal("D\xFCrst".force_encoding('iso-8859-2'), "D\u00FCrst".encode('iso-8859-2')) ぐらいを書きます。しかし現在 encode は存在しない (けど 変換が可能) な Encoding を勝手に作るに対して、 force_encoding はそういうことを一切しないので問題になります。 要約すると force_encoding と encode の「Encoding として可能」 な認識が違ってしまうと問題になります。encode を一昔前の挙動 に戻すか (これはこちらでやります)、それとも force_encoding でなんだかの形で変換可能な Encoding 名をチェックするか (チェックする関数そのものもこちらで作れます) にした方が いいかと思います。どちらにするのかは全般的に決めた方がいい と思いますが、今の中途半端な状態だけは避けた方がいいと思います。 force_encoding で例えば force_encoding('hoge') まで許すのもちょっとやりすぎかと思います。 宜しくお願いします。 Martin. At 11:05 07/12/11, Martin Duerst wrote: >At 21:50 07/12/10, Nobuyoshi Nakada wrote: >>なかだです。 >> >>At Mon, 10 Dec 2007 20:35:58 +0900, >>Martin Duerst wrote in [ruby-dev:32520]: >>> 中田さんの下記のパッチの一部は「全ての encode で使える >>> 文字コードは Encoding として存在する」という前提で >>> 行われていたが、それは必ずしもそうとも限りません。 >>> その部分を元に戻していただきますでしょうか。 >>> それともこちらから更なるパッチを送った方がいいだすか。 >> >>直しました。 > >ありがとうございました。大変助かりました。 > >>一緒に、登録していないEncodingに変換した場合は、変換 >>後にreplicateしてセットするようにしました。 > >以前まつもとさんがメールで「ASCII-8BIT でいい」と書きましたが、 >このところは Encoding の専門家の中田さんにまかせます。 > >これで手元のテストは一つ以外全部通過します。 > >残るのは、encode! の場合変換後の Encoding が変換前のまま >ということです。これを rb_str_shared_replace か >rb_str_transcode_bang で修正した方がいいと思いますが、 >どちらの方がいいでしょうか。 > >test/ruby/test_transcode.rb へのパッチを添付します。 >テストの数が少し増えましたし、中田さんの Encoding の >設定の変更にあわせました。 > >宜しくお願いします。 Martin. > > >#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University >#-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp #-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University #-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp