Ruby REXML与编码

Ruby REXML与编码,ruby,encoding,utf-8,rexml,Ruby,Encoding,Utf 8,Rexml,谁能给我解释一下这个结果吗 #!/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>

谁能给我解释一下这个结果吗

#!/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>
#/usr/bin/env ruby
#编码:utf-8
需要“rexml/文档”
doc=REXML::Document.new(数据)
放入“doc:#{doc.encoding}”
每个(doc,//item)do | item|
将“#{item}:#{item.to_.encoding}”
结束
__结束__
试验
Über
8.
输出:

doc: UTF-8
  <item>Test</item>: US-ASCII
  <item>Über</item>: UTF-8
  <item>8</item>: US-ASCII
doc:UTF-8
测试:US-ASCII
Über:UTF-8
8:US-ASCII
似乎REXML并不关心文档编码是什么,而是开始自动检测每个项目的编码。。。即使UTF-8是原始编码,我是否注定要对从REXML中提取的每个字符串进行
encode('UTF-8')
?这里发生了什么?

您正在调用您的
元素。要获取实际文本,请将
元素.get_text()
添加到链中(并调用
text.To_s()
):

输出:

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

问得好。我有了新的维度。呃,这不是我想要的。我试图模拟
内部html
(REXML中缺少AFAIK),因此我不想要文本节点,我想要
元素的XML表示,这是
要做的。您的编码与冒号前面的编码不匹配(冒号是一个隐式的
to_s
)。(另外,如果我确实想要文本,
.text
应该等同于
.get\u text。为了
Element.text()
相当于
Element.get_text().value()
,如果您确实想要文本节点,这确实会更好。当
Node.to_s()
生成字符串时,它会从头开始,而不考虑原始文件的编码。翻查源头,我看没办法。(本质上是
“+”+“…
)根据您的需要,您不一定会遇到问题,顺便说一下。。。位是一样的,只是没有显示UTF-8的字符串元数据。是的,我最后得到了
encode
route。(问题是,在某些情况下,检测到一个不可靠的编码,然后当
将这些片段连接在一起时,我会得到不兼容的编码错误。)尽管如此,我还是希望
尊重
文档。编码
:(谢谢。