使用Nokogiri替换时的编码问题

Cri*_*ian 6 ruby encoding character-encoding nokogiri

我有这个代码:

# encoding: utf-8
require 'nokogiri'

s = "<a href='/path/to/file'>Café Verona</a>".encode('UTF-8')
puts "Original string: #{s}"

@doc = Nokogiri::HTML::DocumentFragment.parse(s)

links = @doc.css('a')
only_text = 'Café Verona'.encode('UTF-8')
puts "Replacement text: #{only_text}"
links.first.replace(only_text)
puts @doc.to_html
Run Code Online (Sandbox Code Playgroud)

但是,输出是这样的:

Original string: <a href='/path/to/file'>Café Verona</a>
Replacement text: Café Verona
Café Verona
Run Code Online (Sandbox Code Playgroud)

为什么文本@doc最终会出现错误的编码?

我尝试使用和不encode('UTF-8')使用或使用Document代替DocumentFragment,但它是同样的问题.

我正在使用Nokogiri v1.5.6和Ruby 1.9.3p194.

Ism*_*reu 5

似乎如果你传递一个nokogiri文本对象,它会做的事情;)

links.first.replace Nokogiri::XML::Text.new(only_text, @doc)
Run Code Online (Sandbox Code Playgroud)