gsub来自ruby中字符串的ASCII码字符

时间:2010-08-13 04:04:36

标签: ruby

我正在使用nokogiri来屏蔽一些HTML。在某些情况下,我收到了一些奇怪的字符,我用下面的代码跟踪了这些字符的ASCII码:

  @parser.leads[0].phone_numbers[0].each_byte  do |c|
    puts "char=#{c}"
  end

有问题的字符的ASCII码为194和160.

我想以某种方式解析这些字符。

我尝试了以下代码,但它不起作用。

@parser.leads[0].phone_numbers[0].gsub(/160.chr/,'').gsub(/194.chr/,'')

谁能告诉我如何实现这个目标?

5 个答案:

答案 0 :(得分:14)

我在尝试在“修剪”字符串时删除不可见的字符时发现了这个问题。

s.strip对我不起作用,我发现隐形人物的ord194

上述方法都不适用于我,但后来我发现“Convert non-breaking spaces to spaces in Ruby”问题说:

  

使用/\u00a0/匹配不间断的空格:s.gsub(/\u00a0/, ' ')将所有不间断的空格转换为常规空格

     

使用/[[:space:]]/匹配所有空格,包括Unicode空格,如非中断空格。这与/\s/不同,s.gsub(/[[:space:]]/,'') 仅匹配ASCII空格。

很高兴我找到了!现在我正在使用:

gsub

这不回答如何{{1}}特定字符代码的问题,但如果您只是想删除空格,那么它似乎运行良好。

答案 1 :(得分:6)

您的问题是您想要进行方法调用,而是创建一个Regexp。你正在搜索和替换字符串“160”后跟任何字符然后字符串“chr”的字符串,然后执行相同的操作,除非“160”替换为“194”。

相反,请gsub(160.chr, '')

答案 2 :(得分:4)

更新(2018):此代码在当前的Ruby版本中不起作用。请参阅其他答案。

您也可以尝试

s.gsub(/\xA0|\xC2/, '')

s.delete 160.chr+194.chr

答案 3 :(得分:0)

首先想到的是你应该使用gsub吗?而不是gsub

gsub返回一个字符串和gsub!执行替换

答案 4 :(得分:0)

我在尝试上述解决方案时遇到“无效的多字节转义”错误,但针对不同的情况。当数字大于999时谷歌返回\ xA0,我想删除它。所以我所做的就是使用return_value.gsub(/ [\ xA0] / n,“”)代替它,它对我来说非常好。