【问题标题】:Change UTF-8 spaces to RegEx-able spaces将 UTF-8 空格更改为 RegEx-able 空格
【发布时间】: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/…

标签: ruby regex encoding utf-8


【解决方案1】:

添加注释#encoding: UTF-8 作为脚本的第一行;使用 /[[:space:]]/ 查找 Unicode 空格。

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2021-06-09
    • 2011-10-12
    相关资源
    最近更新 更多