Libxmlは何も悪くない

id:Hexa:20061024:1161693281
わざわざ検証をしてくださったようで,本当に有り難い.一応コメント欄になぜ文字化けをしたか書いておいたけれど,もう一度試してみるとそれだけでは不十分だったので,コッチでメモっておく.

エンコーディングUTF-8と明記

参照先のソースコードを読んでもらえればわかるけれども,

doc.encoding = "UTF-8"

が無いと文字化けする.実際に試してもらえれば良くわかる.パースはUTF-8でするくせに,デフォの値は決めてくれてないのね.

標準出力では文字化けする

以下のコードを書いた(といっても,この間のコードにちょっと手を加えただけ).

require 'rubygems'
require 'xml/libxml'

doc = XML::Document.new
doc.encoding = 'UTF-8'
doc.root = XML::Node.new('goodslist')
root = doc.root
root << goods = XML::Node.new("goods")
goods << name = XML::Node.new("name")
name << '坊ちゃん'
goods << price = XML::Node.new("price")
price << '1050'
goods << duedate = XML::Node.new("duedate")
duedate << '2006-10-15'

puts root

doc.save('output2.xml', true) # ファイルに出力

それでは実行してみよう.

% ruby lxml.rb   
<goodslist>
  <goods>
    <name>&#x574A;&#x3061;&#x3083;&#x3093;</name>
    <price>1050</price>
    <duedate>2006-10-15</duedate>
  </goods>
</goodslist>

このようにターミナルでは文字化けしてて,本当に悲しい気分になる.けれども出力されたファイルを開いてみると…?

<?xml version="1.0" encoding="UTF-8"?>
<goodslist>
  <goods>
    <name>坊ちゃん</name>
    <price>1050</price>
    <duedate>2006-10-15</duedate>
  </goods>
</goodslist>

このように,ちゃんとボクにも「坊ちゃん」と読めるではないか!

てことで

文字化け問題は解決!