此代码使用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)
我们如何解决这个问题?
答案 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*')
小心,我不确定没有一个数据丢失。