From: "naruse (Yui NARUSE)" Date: 2012-11-04T00:10:22+09:00 Subject: [ruby-dev:46387] [ruby-trunk - Feature #4872] REXML::XMLDecl#encodingがStringではなくEncodingを返すようにする Issue #4872 has been updated by naruse (Yui NARUSE). kou (Kouhei Sutou) wrote: > kou (Kouhei Sutou) wrote: > > > * REXML::XMLDecl#encodingはEncodingを返すようにする。 > > これはやらないことにしました。 > これをやりたかったもともとの理由は、ユーザーとしてエンコーディング情報を正規化した状態で扱いたかった(UTF-8かutf-8かとか気にしたくない)からでした。が、よく見てみたら、XMLDecl#encodingはupcaseして正規化していました。(utf-8を気にせずに常にUTF-8かで確認できた。)なので、やる理由がなくなりました。 > > あと、↓の通り、XML宣言のencodingとXML文書のエンコーディングを結び付けないことにした(結び付けないこともできるようにした)のでXML文書のエンコーディングをXMLDecl#encoding(これはXML宣言のencoding)で返すのがおかしいなぁと思うようになりました。なので、やめました。XML文書のエンコーディングをだれが持つかという話は↓で。 > > > * REXML::XMLDecl#writeで使うXMLエンコーディングは引数で指定できるようにする。(指定されない場合はREXL::XMLDecl#encodingを使ってXMLエンコーディングを決める。) > > これはREXML::XMLdecl#writeじゃなくてREXML::Document#writeで出力エンコーディングを指定できるようにしました。 > XML宣言のencodingとXML文書のエンコーディングを変えたい時(例えば、XML宣言のencodingはShift_JISでXML文書のエンコーディングはWindows-31Jにしたい時)はこうします。 > > document.xml_decl.encoding = "Shift_JIS" > document.write(:encoding => "Windows-31J") > > こうした理由はXML文書を生成するときはREXML::XMLDecl#writeではなくREXML::Document#writeを使うので、REXML::XMLDecl#writeでカスタマイズできても使いづらいからです。 > > XML宣言のencodingとXML文書のエンコーディングを別々に指定したい、というのが実現したいことです。それを、REXML::Docuemnt#writeでやるならXML宣言のencodingではなくXML文書のエンコーディングを指定するのが自然なので(DocumentはXML文書のことだから)、XML宣言のencodingではなくXML文書のエンコーディングを出力時に変更できるようにしました。 なるほど、確かにその方がよいと思います。 ---------------------------------------- Feature #4872: REXML::XMLDecl#encodingがStringではなくEncodingを返すようにする https://bugs.ruby-lang.org/issues/4872#change-32295 Author: kou (Kouhei Sutou) Status: Closed Priority: Normal Assignee: kou (Kouhei Sutou) Category: lib Target version: 2.0.0 経緯は #3990 の後ろの方の流れを参照。 1.9.3がリリースされてからやる。 -- http://bugs.ruby-lang.org/