Feature #4872

REXML::XMLDecl#encodingがStringではなくEncodingを返すようにする

Added by Kouhei Sutou about 4 years ago. Updated over 2 years ago.

[ruby-dev:43750]
Status:Closed
Priority:Normal
Assignee:Kouhei Sutou

Description

経緯は #3990 の後ろの方の流れを参照。

1.9.3がリリースされてからやる。


Related issues

Related to Ruby trunk - Bug #3990: tests of rexml/rss reports many errors and failures without iconv Closed 10/27/2010

Associated revisions

Revision 37355
Added by Kouhei Sutou over 2 years ago

  • lib/rexml/document.rb (REXML::Document#write): Add :encoding option to support custom XML encoding. Feature #4872
  • test/rexml/test_document.rb: Add tests for the above change.

Revision 37355
Added by Kouhei Sutou over 2 years ago

  • lib/rexml/document.rb (REXML::Document#write): Add :encoding option to support custom XML encoding. Feature #4872
  • test/rexml/test_document.rb: Add tests for the above change.

Revision 37440
Added by Kouhei Sutou over 2 years ago

  • lib/rexml/document.rb (REXML::Document#write): Document encoding option. Now different encoding between XML file's encoding and XML declaration's encodiong is support. Feature #4872
  • lib/rexml/xmldecl.rb (REXML::XMLDecl#write): Always use XMLDecl's encoding.
  • test/rexml/test_document.rb: Update tests for the above change.

Revision 37440
Added by Kouhei Sutou over 2 years ago

  • lib/rexml/document.rb (REXML::Document#write): Document encoding option. Now different encoding between XML file's encoding and XML declaration's encodiong is support. Feature #4872
  • lib/rexml/xmldecl.rb (REXML::XMLDecl#write): Always use XMLDecl's encoding.
  • test/rexml/test_document.rb: Update tests for the above change.

History

#1 Updated by Kouhei Sutou about 4 years ago

(本文中で #3990 にリンクをはるにはどうしたらよいのでしょうか。。。)

#2 Updated by Kouhei Sutou almost 4 years ago

=begin
成瀬さんと話して(やるなら)以下のようにすることにした。
* REXML::XMLDecl#encodingはEncodingを返すようにする。
* REXML::XMLDecl#writeで使うXMLエンコーディングは引数で指定できるようにする。(指定されない場合はREXL::XMLDecl#encodingを使ってXMLエンコーディングを決める。)
=end

#3 Updated by Shyouhei Urabe over 3 years ago

  • Status changed from Open to Assigned

#4 Updated by Kouhei Sutou over 2 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r37355.
Kouhei, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • lib/rexml/document.rb (REXML::Document#write): Add :encoding option to support custom XML encoding. Feature #4872
  • test/rexml/test_document.rb: Add tests for the above change.

#5 Updated by Kouhei Sutou over 2 years ago

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文書のエンコーディングを出力時に変更できるようにしました。

#6 Updated by Yui NARUSE over 2 years ago

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文書のエンコーディングを出力時に変更できるようにしました。

なるほど、確かにその方がよいと思います。

Also available in: Atom PDF