From: Kouhei Sutou Date: 2011-02-21T22:50:44+09:00 Subject: [ruby-dev:43231] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv 須藤です。 ここ1,2ヶ月は手をつけられそうなので、今、考えている分だけ書 いておきます。 In <4CEAAED7.5090808@airemix.jp> "[ruby-dev:42618] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv" on Tue, 23 Nov 2010 02:56:41 +0900, "NARUSE, Yui" wrote: >>> 依存関係が上記の通りなので、まず XMLDecl#encoding を決める必要があります。 >>> >>> XMLDecl#encoding 単体での論点は、 >>> * 型 >>> * 型が String の場合、正規化するかどうか >>> でしょう。 >>> >>> わたしは、[ruby-dev:42608] で挙げた csWindows31J を指定したい例を考えるに、 >>> String でかつ正規化しない必要があると考えています。 >> >> わかりました! >> では、XMLDecl#encodingの方からで! > > はい。 > > わたしの主張だけまとめておくと、 > > * XMLDecl#encoding は String であるべき > * XMLDecl#encoding= や初期化等では正規化しない > * XMLDecl#canonical_encoding_name 等を追加することには反対しない > (けど、いらないんじゃないかなぁ、要ユースケース) > > 理由は XML 宣言のエンコーディング属性は正規名以外を入れたい時があるから。 > その「入れたい時」とは想定している受信パーサが解釈可能な > エンコーディング名がその正規名と異なる場合。 > > と言ったところでしょうか。 時間がたって忘れかけているのですが、 XMLDecl#encoding は String であるべき というよりは、 XML宣言に記述するエンコーディング(=情報交換用符号ですよ ね?)と内部処理に使うエンコーディング(=内部処理用符号 =transcode ですよね?)を別々に管理できるようにするべき ですよね? で、別々にしないと困る例がUTF-16とUTF-32なんですよね。 当時のRubyにはUTF-16とUTF-32というEncodingがなかったので「情 報交換用符号」を表現できないからEncodingを使っちゃだめで、 UTF-16とUTF-32に対応するためには代わりにStringを使うこと、と いうことだと認識しています。あっていますか? 今、trunkをみてみると、UTF-16/UTF-32というEncodingが追加され ていたので、「情報交換用符号」の表現としてEncodingを使えると 思っています。 それとは別に「内部処理用符号」を持つようにしようと思っていま す。名前はXMLDecl#transcode, XMLDecl#transcode=がいいんじゃな いかと思っています。これにもEncodingを使うつもりです。