【发布时间】:2012-09-19 22:31:51
【问题描述】:
我有以下代码用 Nokogiri 解析 HTML 文档:
td.next_element.text.scan(/\A[^(]+/).first.gsub(/\s+/, " ").strip
还有一个带有正则表达式的 case 语句,它具有 \s+ 并且没有捕获任何内容。我尝试使用strip,但它没有任何作用。
在使用上面的gsub 行进行测试后,我发现空格的编码方式存在问题。 td.next_element.text[-2].ord 返回的不是我预期的 32,而是 160。我意识到我的文档是 UTF-8 而不是 ASCII,而且 160 是一个不间断的空格。
我应该能够做到这一点,我想:
case td.text.strip.downcase.gsub(/\xA0|\xC2/, ' ')
问题是,我明白了
Encoding::CompatibilityError
(incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)):
我该怎么办?另外,正则表达式不应该匹配所有空格,而不仅仅是 ASCII?
【问题讨论】:
-
您需要做的是设置输入数据的字符编码。我不是 Ruby 程序员,所以我不知道具体细节,但应该有一些库。我确实找到了一篇相关文章:yehudakatz.com/2010/05/05/…