我正在使用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/,'')
谁能告诉我如何实现这个目标?
答案 0 :(得分:14)
我在尝试在“修剪”字符串时删除不可见的字符时发现了这个问题。
s.strip
对我不起作用,我发现隐形人物的ord
号194
上述方法都不适用于我,但后来我发现“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,“”)代替它,它对我来说非常好。