Ruby 使用Nokogiri替换时的编码问题

Ruby 使用Nokogiri替换时的编码问题,ruby,encoding,character-encoding,nokogiri,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'.en

我有以下代码:

# 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
编码:utf-8 需要“nokogiri” s=”“.encode('UTF-8') 放置“原始字符串:#{s}” @doc=Nokogiri::HTML::DocumentFragment.parse links=@doc.css('a') 仅文本='CaféVerona'。编码('UTF-8') 放置“替换文本:{only_text}” links.first.replace(仅文本) 将@doc.to_html放入 然而,结果是:

Original string: <a href='/path/to/file'>Café Verona</a>
Replacement text: Café Verona
Café Verona
原始字符串:
替换文本:维罗纳咖啡馆
维罗纳咖啡馆
为什么
@doc
中的文本以错误的编码结尾

我尝试过使用和不使用
encode('UTF-8')
,或者使用
Document
而不是
DocumentFragment
,但问题是一样的


我将Nokogiri v1.5.6与Ruby 1.9.3p194一起使用。

似乎如果您传递一个Nokogiri文本对象,它就会执行该操作;)


我不能重复这个问题,但我有两件不同的事情要尝试:

而不是使用:

s = "<a href='/path/to/file'>Café Verona</a>".encode('UTF-8')
表示系统和终端的语言/字符集编码不正确。试图将系统上的UTF-8字符串输出到其他设置可能会在终端和/或浏览器中导致不匹配。Windows系统通常是Win-1252、ISO-8859-1或类似的系统,而不是UTF-8。在Mac OS系统上,我设置了以下环境变量:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

“”可能也有用。

我无法使用Ruby 2.0.0或1.9.3复制它。顺便问一下,你的Ruby版本是什么?你有没有试过把@doc.to_html(:encoding=>“UTF-8”)@jonallard它是Ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin11.4.0]我试过@PinnyM,但没有成功!谢谢我想知道为什么这根绳子不起作用。也许是虫子?我真的怀疑这是虫子。100次中有99次是用户错误。我不认识nokogiri的实习生。所以我不知道这是不是一只虫子。但是你可以制造一个关于它的问题,谢谢你的回答。我在我的问题中提到,我在末尾尝试了使用和不使用encode()。我认为我的终端很好,我也在Mac上,其他字符串看起来很好(也是UTF-8),所以这应该不是问题。不管怎样,伊斯梅尔的回答解决了我的问题,但仍然想知道是什么错了。。。
s = "<a href='/path/to/file'>Café Verona</a>"
Café Verona
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8