【问题标题】:I always get an UndefinedConversionError in Ruby 2.0 while scraping with Mechanize在使用 Mechanize 进行抓取时,我总是在 Ruby 2.0 中遇到 UndefinedConversionError
【发布时间】:2013-09-04 17:46:42
【问题描述】:

当我尝试使用 Mechanize 和 Ruby 2.0 提交文本区域时,我总是得到一个

Encoding::UndefinedConversionError: U+0151 from UTF-8 to ISO-8859-1

然后我尝试用Iconv转换文本,我得到了类似的结果:

Iconv.iconv("LATIN1", "UTF-8", text)

我收到此错误消息:

Iconv::IllegalSequence: "őzködik, melyet "...

由于文本包含东欧字符。我可以做些什么来避免这种不便,或者如何在不同的编码之间正确转换?

【问题讨论】:

  • 你能给出代码部分,通过它你将文本数据放入文本区域框...?
  • 该字符不会转换为 latin1,因为它在 latin1 中不存在。
  • 我的 Ruby 程序包含文本作为 here-document,并且我的 Ruby 程序的编码设置为 utf-8 (# encoding: utf-8) 如果我在 Opera 浏览器中加载网页,我检查了源 HTML,页面编码实际上设置为 ISO-8859-1,如果我只是粘贴包含错误字符的文本,它可以正常工作,我可以毫无错误地提交。如何将 utf-8 字符串转换为 ISO-8859-1 / LATIN1?也许我可以使用 HTML 中的代码:ő (从此表thesauruslex.com/typo/eng/enghtml.htm)

标签: ruby encoding utf-8 mechanize iconv


【解决方案1】:

我找到了一个优雅的解决方案:

replacements = [["À", "À"], ["Á", "Á"], ["Â", "Â"], ["Ã", "Ã"], ["Ä", "Ä"], ["Å", "Å"], ["Æ", "Æ"], ["Ç", "Ç"], ["È", "È"], ["É", "É"], ["Ê", "Ê"], ["Ë", "Ë"], ["Ì", "Ì"], ["Í", "Í"], ["Î", "Î"], ["Ï", "Ï"], ["Ð", "Ð"], ["Ñ", "Ñ"], ["Ò", "Ò"], ["Ó", "Ó"], ["Ô", "Ô"], ["Õ", "Õ"], ["Ö", "Ö"], ["Ø", "Ø"], ["Ù", "Ù"], ["Ú", "Ú"], ["Û", "Û"], ["Ü", "Ü"], ["Ý", "Ý"], ["Þ", "Þ"], ["ß", "ß"], ["à", "à"], ["á", "á"], ["â", "â"], ["ã", "ã"], ["ä", "ä"], ["å", "å"], ["æ", "æ"], ["ç", "ç"], ["è", "è"], ["é", "é"], ["ê", "ê"], ["ë", "ë"], ["ì", "ì"], ["í", "í"], ["î", "î"], ["ï", "ï"], ["ð", "ð"], ["ñ", "ñ"], ["ò", "ò"], ["ó", "ó"], ["ô", "ô"], ["õ", "õ"], ["ö", "ö"], ["ø", "ø"], ["ù", "ù"], ["ú", "ú"], ["û", "û"], ["ü", "ü"], ["ý", "ý"], ["þ", "þ"], ["ÿ", "ÿ"]]

def replace(str,replacements)
 replacements.each {|replacement| str.gsub!(replacement[0], replacement[1])}
 return str
end

my_string=replace(my_string,replacements)

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多