UTF-8中的字节序列无效(ArgumentError)

Sim*_*ity 18 ruby error-handling utf-8

我正在尝试运行Ruby脚本,并且总是在这一行上出错:

file_content.gsub(/dr/i,'med')
Run Code Online (Sandbox Code Playgroud)

我试图用"med"代替"dr".

错误是:

program.rb:4:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
Run Code Online (Sandbox Code Playgroud)

为什么,我该如何解决这个问题?

我正在使用Ruby 2.2.1p85开发MAC OS X Yosemite机器.

jon*_*now 20

可能你的字符串不是UTF-8格式,所以请使用

if ! file_content.valid_encoding?
  s = file_content.encode("UTF-16be", :invalid=>:replace, :replace=>"?").encode('UTF-8')
  s.gsub(/dr/i,'med')
end
Run Code Online (Sandbox Code Playgroud)

请参阅" Ruby 2.0.0 String#Match ArgumentError:UTF-8中的无效字节序列 ".

  • @Simplicity你正在使用Ruby 2.2,所以你可以使用[`scrub`](http://ruby-doc.org/core-2.2.2/String.html#method-i-scrub)方法.对于没有`scrub`的旧版本,这种技术实际上是一种解决方法.(但实际上你应该弄清楚编码实际上是什么并正确转换它,否则你会丢失数据). (5认同)