From: Martin Duerst Date: 2007-12-13T13:49:43+09:00 Subject: [ruby-dev:32573] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. At 04:01 07/12/13, Nobuyoshi Nakada wrote: >なかだです。 > >At Wed, 12 Dec 2007 19:39:46 +0900, >Martin Duerst wrote in [ruby-dev:32555]: >> 例えば "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 はそういうことを一切しないので問題になります。 > >たしかに。逆に、encodeを先にするとforce_encodingのほうもセットさ >れてしまいますね。 そうですね。Encoding ようの String などのフラグも含め、 テストしたいときにちょっと色々気をつけないといけない ところがでてくるかと思います。 >> 要約すると force_encoding と encode の「Encoding として可能」 >> な認識が違ってしまうと問題になります。encode を一昔前の挙動 >> に戻すか (これはこちらでやります)、それとも force_encoding >> でなんだかの形で変換可能な Encoding 名をチェックするか >> (チェックする関数そのものもこちらで作れます) にした方が >> いいかと思います。どちらにするのかは全般的に決めた方がいい >> と思いますが、今の中途半端な状態だけは避けた方がいいと思います。 > >「一昔前の挙動」というのは、対応していないencodingに変換したとき >はASCII-8BITというものですか。 どうですね。 >それぞれのencodingを区別するために >は、やはりそれだけではまずいと思うのですが。 それは確かです。 >「変換可能な Encoding 名をチェックする」というのは、動的に追加す >る場合にも対応できるでしょうか。 中田さんのようなパッチでやると確かにそういう問題がでます。 ここで考えているのはあくまでルビがサポートしている変換の リストを前もって内部で持っているということです。 >今、rb_enc_find_index()で拡張ライブラリを自動的に探すようにしよ >うとしていますので、必要なencodingは単にreplicateだけするライブ >ラリを追加しておくのが単純でいいかもしれません。 replicate かどうかは確かにチェックできますが、一般のユーザは Encoding が存在していると完全にサポートされていると勘違い する人が多くでる可能性もあると思います。 宜しくお願いします。 Martin. #-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University #-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp