我有一个在ruby 1.9上运行的rails3应用程序,我有一些痛苦的编码工作。
我的任务是打开一个远程html页面,并从中解析一些信息。 我的所有代码和数据库都是UTF-8,即使用#code:UTF-8,mysql修复等等。
我打开的页面是charset ISO-8859-1,当我的解析器找到strage字符时,它会抱怨它不是一个有效的UTF-8。
我尝试在我解析的所有字符串中使用.force_encoding(“UTF-8”),但它仍然存在。 当我尝试转换整个页面时,我得到了这个:
a = open("someurl")
b = a.read.encode("UTF-8")
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8
from (irb):7:in `encode'
from (irb):7
from /Users/tscolari/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands/console.rb:44:in `start'
from /Users/tscolari/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands/console.rb:8:in `start'
from /Users/tscolari/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
我该如何解决这个问题?当他将iso8859页面“转换”为ascii时,它似乎已经出错了。
更新
我尝试使用'r:iso-8859-1:utf-8'打开网址,但显然我现在的问题是Hpricot,我用它进行解析。
>a = open(b, 'r:iso-8859-1:utf-8')
>a.read.encoding
=> #<Encoding:UTF-8>
> Hpricot(a).inner_html.encoding
=> #<Encoding:ASCII-8BIT>
以及所有错误......可能这是一个hpricot问题,但如果有人知道修复,请。
答案 0 :(得分:1)
Hpricot - UTF-8问题 UTF-8中无效的字节序列(ArgumentError)
require 'hpricot'
require 'open-uri'
doc = open('http://www.amazon.co.jp/') { |f| Hpricot(f.read) }
puts doc.to_html
open('http://www.amazon.co.jp/') { |f| Hpricot(f.read.encode("UTF-8")) }
答案 1 :(得分:0)
a = open("someurl", "r:iso-8859-1:utf-8")
有关详细信息,请参阅this other SO question ...