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

dag*_*da1 15 ruby

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

  @parser.leads[0].phone_numbers[0].each_byte  do |c|
    puts "char=#{c}"
  end
Run Code Online (Sandbox Code Playgroud)

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

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

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

@parser.leads[0].phone_numbers[0].gsub(/160.chr/,'').gsub(/194.chr/,'')
Run Code Online (Sandbox Code Playgroud)

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

cwd*_*cwd 14

我在尝试在"修剪"字符串时去掉不可见的字符时发现了这个问题.

s.strip对我不起作用,我发现这个看不见的角色有这个ord数字 194

上面的方法都没有为我工作,但后来我发现" 将非破坏空间转换为Ruby中的空格 "问题说:

使用/\u00a0/匹配非打破空间:s.gsub(/\u00a0/, ' ')将所有非中断空格到正规场所

使用/[[:space:]]/以匹配所有的空白,包括Unicode空白像非换空间.这与之不同/\s/,它只匹配ASCII空格.

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

s.gsub(/[[:space:]]/,'')
Run Code Online (Sandbox Code Playgroud)

这并没有回答如何使用gsub特定字符代码的问题,但如果你只是想删除空格,它似乎工作得很好.


Chu*_*uck 6

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

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


Mla*_*vić 4

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

你也可以尝试

s.gsub(/\xA0|\xC2/, '')
Run Code Online (Sandbox Code Playgroud)

或者

s.delete 160.chr+194.chr
Run Code Online (Sandbox Code Playgroud)

  • 这个: ``s.gsub(/\xA0|\xC2/, '')``` 不正确。您首先需要转义: ```s.gsub(/\\xA0|\\xC2/, '')``` 以避免 ```SyntaxError: (pry):6: invalid multibyte escape: /\xA0 |\xC2/``` 错误,即使你这样做,你也会得到: ```ArgumentError: UTF-8 中的无效字节序列```。第一个尝试 ``s.force_encoding("BINARY").gsub(0xA0.chr,"")``` ,然后对第二个进行相应更改。 (7认同)