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')REXML 中提取每个字符串,即使 UTF-8 是原始编码?这里发生了什么?

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 回答