Project

General

Profile

Feature #4872

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

Added by kou (Kouhei Sutou) over 9 years ago. Updated almost 8 years ago.

Status:
Closed
Priority:
Normal
Target version:
[ruby-dev:43750]

Description

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

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


Related issues

Related to Ruby master - Bug #3990: tests of rexml/rss reports many errors and failures without iconvClosedkou (Kouhei Sutou)10/27/2010Actions

Updated by kou (Kouhei Sutou) over 9 years ago

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

Updated by kou (Kouhei Sutou) over 9 years ago

=begin
成瀬さんと話して(やるなら)以下のようにすることにした。

  • REXML::XMLDecl#encodingはEncodingを返すようにする。
  • REXML::XMLDecl#writeで使うXMLエンコーディングは引数で指定できるようにする。(指定されない場合はREXL::XMLDecl#encodingを使ってXMLエンコーディングを決める。) =end
#3

Updated by shyouhei (Shyouhei Urabe) over 8 years ago

  • Status changed from Open to Assigned
#4

Updated by kou (Kouhei Sutou) almost 8 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.

Updated by kou (Kouhei Sutou) almost 8 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 naruse (Yui NARUSE) almost 8 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