0

誰かこの結果を説明してくれませんか?

#!/usr/bin/env ruby
# encoding: utf-8

require 'rexml/document'

doc = REXML::Document.new(DATA)
puts "doc: #{doc.encoding}"
REXML::XPath.each(doc, '//item') do |item|
  puts "  #{item}: #{item.to_s.encoding}"
end

__END__
<doc>
  <item>Test</item>
  <item>Über</item>
  <item>8</item>
</doc>

出力:

doc: UTF-8
  <item>Test</item>: US-ASCII
  <item>Über</item>: UTF-8
  <item>8</item>: US-ASCII

REXML はドキュメントのエンコーディングを気にせず、各アイテムのエンコーディングを自動検出し始めるようです...encode('UTF-8')元のエンコーディングが UTF-8 であるにもかかわらず、REXML から抽出した各文字列に運命づけられているのでしょうか? ここで何が起きてるの?

4

1 に答える 1

1

でNode.to_s()を呼び出していますElement。実際のテキストを取得するには、チェーンに追加Element.get_text()します (そしてそれを呼び出しますText.to_s()):

puts "  #{item}: #{item.get_text.to_s.encoding}"

出力:

doc: UTF-8
  <item>Test</item>: UTF-8
  <item>Über</item>: UTF-8
  <item>8</item>: UTF-8
于 2013-04-10T07:07:46.900 に答える