[ruby-list:41854] rexml で doc.xml_decl.encoding = "shift-jis" は駄目ですか?
From:
take_tk <ggb03124@...>
Date:
2006-02-24 10:02:56 UTC
List:
ruby-list #41854
たけ(tk)です
rexml を試しているのですが、
rexml.xml_decl.encoding = "shift-jis" でエラーが出ます。
* エンコード、デコードしている部分としていない部分とがあるみたいです。
* C:/Progra~1/Apollo/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb でNKFを
使うようにすると、別の部分でエラーになる。
----
#! ruby -Ks
require "rexml/document"
doc = REXML::Document.new
doc.xml_decl.encoding = "shift-jis"
p doc.encoding #=> "SHIFT-JIS"
##doc.add REXML::Element.new("pxd")
doc.add_element("pxd")
doc[1].attributes["name"] = "ichiranhyou"
p doc[1].attributes["name"] #=> "ichiranhyou"
puts doc
#=> <?xml version='1.0' encoding='SHIFT-JIS'?><pxd name='ichiranhyou'/>
doc[1].attributes["name"] = "一覧表"
p doc[1].attributes["name"] #=> "一覧表"
puts doc[1].attributes["name"] #=> 一覧表
puts doc
#=> illegal UTF-8 sequence (88) (Uconv::Error)
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb:13:in `u8tosjis'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb:13:in `encode'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/output.rb:17:in `<<'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/attribute.rb:143:in `write'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:685:in `write'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:1026:in `each_attribute'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:1024:in `each_attribute'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:683:in `write'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/document.rb:165:in `write'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/document.rb:163:in `write'
#=> C:/Program Files/Apollo/lib/ruby/1.8/rexml/node.rb:23:in `to_s'
p :ok
----
Windowsのコマンドラインでの実行
----
G:\apollo\tkUtils\PXDoc>ruby -v 1.rb
ruby 1.8.4 (2005-12-24) [i386-mswin32]
"SHIFT-JIS"
"ichiranhyou"
<?xml version='1.0' encoding='SHIFT-JIS'?><pxd name='ichiranhyou'/>
"一覧表"
一覧表
C:/Program Files/Apollo/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb:13:in `u8tosjis': illegal UTF-8 sequence (88) (Uconv::Error)
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb:13:in `encode'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/output.rb:17:in `<<'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/attribute.rb:143:in `write'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:685:in `write'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:1026:in `each_attribute'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:1024:in `each_attribute'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/element.rb:683:in `write'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/document.rb:165:in `write'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/document.rb:163:in `write'
from C:/Program Files/Apollo/lib/ruby/1.8/rexml/node.rb:23:in `to_s'
from 1.rb:19
G:\apollo\tkUtils\PXDoc>
----
linux での実行結果
----
[tk@EDiCube-02 PXDoc]$ ruby -v 1.rb | nkf
/usr/local/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb:11:in `u8tosjis': illegal
UTF-8 sequence (88) (Uconv::Error)
from /usr/local/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb:11:in `encode'
from /usr/local/lib/ruby/1.8/rexml/output.rb:17:in `<<'
from /usr/local/lib/ruby/1.8/rexml/attribute.rb:143:in `write'
from /usr/local/lib/ruby/1.8/rexml/element.rb:685:in `write'
from /usr/local/lib/ruby/1.8/rexml/element.rb:1026:in `each_attribute'
from /usr/local/lib/ruby/1.8/rexml/element.rb:1024:in `each_attribute'
from /usr/local/lib/ruby/1.8/rexml/element.rb:683:in `write'
from /usr/local/lib/ruby/1.8/rexml/document.rb:165:in `write'
from /usr/local/lib/ruby/1.8/rexml/document.rb:163:in `write'
from /usr/local/lib/ruby/1.8/rexml/node.rb:23:in `to_s'
from 1.rb:23
ruby 1.8.4 (2005-12-24) [i686-linux]
"SHIFT-JIS"
"ichiranhyou"
<?xml version='1.0' encoding='SHIFT-JIS'?><pxd name='ichiranhyou'/>
"一覧表"
一覧表
[tk@EDiCube-02 PXDoc]$
----
C:/Progra~1/Apollo/lib/ruby/1.8/rexml/encodings/SHIFT-JIS.rb で「 begin
//require 'uconv'・・」をコメントアウトして、NKFを使うようにすると、別の
部分でエラーになる。名前が入っていない。
----
G:\apollo\tkUtils\PXDoc>ruby -v 1.rb
ruby 1.8.4 (2005-12-24) [i386-mswin32]
"SHIFT-JIS"
"ichiranhyou"
<?xml version='1.0' encoding='SHIFT-JIS'?><pxd name='ichiranhyou'/>
"一覧表"
一覧表
<?xml version='1.0' encoding='SHIFT-JIS'?><pxd name=''/> # ←★
:ok
G:\apollo\tkUtils\PXDoc>
----
Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武