ruby中字符串中的gsub ASCII代码字符

ruby中字符串中的gsub ASCII代码字符,ruby,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/,'

我正在使用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/,'')

有谁能告诉我如何做到这一点吗?

首先想到的是您是否应该使用gsub!而不是gsub


gsub返回一个字符串,gsub!执行就地替换

您的问题是您想执行一个方法调用,但是您正在创建一个Regexp。您正在搜索并替换由字符串“160”后跟任意字符,然后是字符串“chr”组成的字符串,然后执行相同的操作,但“160”替换为“194”

相反,请执行
gsub(160.chr.)
更新(2018):此代码在当前Ruby版本中不起作用。请参考其他答案。

你也可以试试

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


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

我在“修剪”字符串时试图去除不可见字符时发现了这个问题

s.strip
对我不起作用,我发现不可见的字符有
ord
number
194

上述方法都不适用于我,但后来我发现了一个“问题”,上面写着:

使用
/\u00a0/
匹配非中断空格:
s.gsub(/\u00a0/,“”)
将所有非中断空格转换为常规空格

使用
/[:space:][]/
匹配所有空白,包括Unicode空白,如非中断空格。这与只匹配ASCII空格的
/\s/
不同

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

s.gsub(/[[:space:]]/,'')

这并不能回答如何
gsub
特定字符代码的问题,但如果您只是尝试删除空白,它似乎工作得很好。

我不会说他应该使用
gsub。在不了解上下文的情况下,它可能更合适,也可能非常不合适。我同意。我在想,在这种情况下,他没有给它分配另一个变量。但是你的权利应该是错误的措辞。如果我使用该代码,我会得到以下错误:RegexpError:正则表达式过早结束:/�/我想这是因为gsub(194.chr,'')指的是一个非ASCII字符。@dagda1:您使用的是什么Ruby版本?我在1.8.7或1.9.1中没有看到这个错误。您应该检查页面的编码是否与您的字符串之一对应。您正在使用哪个Ruby版本?此:
s.gsub(/\xA0 |\xC2/,“”)
不正确。首先需要转义:
s.gsub(/\\xA0 |\\xC2/,“”)
以避免语法错误:(pry):6:无效的多字节转义:/\xA0 |\xC2/
错误,即使这样做,也会得到:
参数错误:UTF-8中的无效字节序列。对于第一个,请尝试
s.force_encoding(“BINARY”).gsub(0xA0.chr,”)
,对于第二个,请进行相应的更改。从Ruby 2.1.0开始,这是唯一对我有效的答案。投票吧
s.gsub(/^[:space:]+$/,“”)
对我来说效果更好。
s.gsub(/[[:space:]]/,'')