我正在尝试使用Nokogiri解析HTML页面,但我遇到了一些文本问题。主要是,我无法摆脱不必要的角色。在解析时,当我获得String时,我总是尝试尽可能地清理它。我尝试将非打印字符转换为唯一空格。经过大量修改后,我使用这种方法没有成功:
def clear_string(str)
CGI::unescapeHTML(str).gsub(/\s+/mu," ").strip
end
例如,设置此HTML片段(从http://www.gisa.cat/gisa/servlet/HomeLicitation?licitationID=1061525复制粘贴)
<tr>
<td><span class="linkred2">Tramitació:</span></td>
<td> ordinària </td>
</tr>
Netbeans 7.0使用Nokogiri和clear_string
(上面定义的方法)显示的一些中间示例输出
row.at("td[1]").text # => "Tramitació:"
row.at("td[2]").text # => " ordinària "
clear_string(row.at("td[2]").text) # => " ordinària"
row.at("td[2]").text.scan(/./mu) # => ["\302\240", "o", "r", "d", "i", "n", "\303\240", "r", "i", "a", " "]
我不知道为什么strip
没有摆脱第一个空格。此外,应用clear_string
后的解析结果将使用YAML::dump
转储到yaml文件中。其内容分别为两个文本:
"Tramitaci\xC3\xB3:"
!binary |
wqBvcmRpbsOgcmlh
第一个似乎不太好,但我不知道如何解决第二种情况。
答案 0 :(得分:1)
将字符从一个字符集翻译为另一个字符集的一种方法是使用Iconv
。例如,如果您正在寻找的只是将UTF8转换为ASCII,您可以执行以下操作:
require 'iconv'
s = "ordinària"
Iconv.conv('ASCII//TRANSLIT', 'UTF8', s)
=> "ordinaria"
TRANSLIT
开关告诉Iconv
尝试和音译(近似匹配)不可转换的字符。如果您想要完全忽略不可转换的字符,那么您可以使用IGNORE
开关:
Iconv.conv('ASCII//IGNORE', 'UTF8', s)
=> "ordinria"
请注意Iconv
如果发现无法转换的内容,则会向TRANSLIT
引发异常。为此,您可以将IGNORE
和TRANSLIT
组合在一起:
Iconv.conv('ASCII//TRANSLIT//IGNORE', 'UTF8', s)
=> "ordinaria"