From: Kouhei Sutou Date: 2011-02-22T22:12:11+09:00 Subject: [ruby-dev:43247] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv 須藤です。 あとでまた考えるのですが、今、考えていることをメモがわりに送っ ておきます。 In "[ruby-dev:43246] Re: [Ruby 1.9-Bug#3990][Closed] tests of rexml/rss reports many errors and failures without iconv" on Tue, 22 Feb 2011 18:13:38 +0900, "NARUSE, Yui" wrote: >> XMLDecl#encoding は String であるべき >> >> というよりは、 >> >> XML宣言に記述するエンコーディング(=情報交換用符号ですよ >> ね?)と内部処理に使うエンコーディング(=内部処理用符号 >> =transcode ですよね?)を別々に管理できるようにするべき >> >> ですよね? > > 「別々に管理できる」に加えて、どのような名を名乗るかまで必要です。 > で、Encodingを用いるとEncoding#nameを実際に記述するエンコーディング名に > 用いると思いますが、この場合名前の正規化が走ってしまうのでまずいのです。 > 具体例としては 「csWindows31J」を用いたい時とか。 むぅ。「csWindows31J」ですか。 「csWindows31J」を使いたいときというのは、ようはMicrosoft向 けにXMLを出力したいときですよね。であれば、文字列化するとき に:for_microsoft => trueみたいなオプションを指定するような APIの方がよいと考えています。理由はそっちの方が意図を表現し ているからです。 そもそも、私がXML宣言のエンコーディングにEncodingを使いたいの はtypoとかの間違いをなるべく起こしづらかったり、気付きやすい APIにしたいからです。REXMLはRubyのtranscode(ですよね?)をベー スにしているため、transcodeが対応しているエンコーディング以外 は扱えないので、XML宣言をEncodingで表現すれば、サポート外のも のを検出しやすくなると思っています。 >> それとは別に「内部処理用符号」を持つようにしようと思っていま >> す。名前はXMLDecl#transcode, XMLDecl#transcode=がいいんじゃな >> いかと思っています。これにもEncodingを使うつもりです。 > > 内部処理用符号を持つことには賛成します。 > > けれども「transcode」はCRubyのエンコーディング変換エンジンの実装名で、 > Rubyレイヤにはその名は出していないはずです。 > よって、ここで「transcode」というメソッド名を用いるのは不適だと考えます。 なんと。一般的な用語なのかと思っていました。 であれば、別にアクセサを提供しなくてもよいかなぁという気になっ てきました。そんなに頻繁に使うような気もしないので、属性や内 容をとってきてencodingしてもらうのでも困らなそう。