gsub :: ArgumentError(UTF-8中的无效字节序列)

时间:2012-02-22 19:27:26

标签: ruby utf-8

此代码使用Hpricot gem来获取包含UTF-8字符的HTML。

# <div>This is a test<a href="">测试</a></div>
div[0].to_html.gsub(/test/, "")

当它运行时,它会吐出这个错误(指向gsub):

ArgumentError (invalid byte sequence in UTF-8)

我们如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

找出问题所在。 Hpricot的to_html调用触发错误的方法,以便摆脱我们需要使Hpricot文档编码UTF-8,而不仅仅是那个字符串。我们这样做:

ic = Iconv.new("UTF-8//IGNORE", "UTF-8")
doc = open("http://example.com") {|f| Hpricot(ic.iconv(f.read)) }

然后我们可以调用其他Hpricot方法,但现在整个文档都有UTF-8编码,它不会给我们任何错误。

答案 1 :(得分:0)

在这种情况下,to_html看起来返回非utf8字符串。

我对包含一些非utf8字符的文件有同样的问题。我找到的修复程序并不是很漂亮,但它也适用于您的情况:

the_utf8_string = the_non_utf8_string.unpack('C*').pack('U*')

小心,我不确定没有一个数据丢失。