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

Ruby UTF-8中的字节序列无效(ArgumentError),ruby,utf-8,error-handling,Ruby,Utf 8,Error Handling,我正在尝试运行Ruby脚本,但在这一行中总是出现错误: file_content.gsub(/dr/i,'med') 我想用“医学”来代替“医生” 错误是: program.rb:4:in `gsub': invalid byte sequence in UTF-8 (ArgumentError) 为什么,我如何解决这个问题 我正在使用Ruby 2.2.1p85的MAC OS X Yosemite机器上工作。您的字符串可能不是UTF-8格式,所以请使用 if ! file_content.v

我正在尝试运行Ruby脚本,但在这一行中总是出现错误:

file_content.gsub(/dr/i,'med')
我想用“医学”来代替“医生”

错误是:

program.rb:4:in `gsub': invalid byte sequence in UTF-8 (ArgumentError)
为什么,我如何解决这个问题


我正在使用Ruby 2.2.1p85的MAC OS X Yosemite机器上工作。

您的字符串可能不是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

请参阅“”

谢谢您的回复。如何使用您提供的代码段?因为当我在程序中立即使用它时,我得到main:Object的:未定义的局部变量或方法“s”(NameError)。感谢使用
file\u content
而不是
s
在我的问题中显示的行之前,我有下面一行代码:“file\u content=IO.read(filename)”。我已经把你的代码放在这一行之后,在我的问题的这一行之前,实际上仍然有相同的代码problem@Simplicity您使用的是Ruby 2.2,因此可以直接使用该方法。对于没有
scrub
的旧版本,此技术实际上是一种变通方法。(但实际上,您应该计算出编码的实际内容并正确地转换它,否则您将丢失数据)。对我来说,这从变量名中保存了我,看起来您正在从文件中读取数据,对吗?文件来自哪里?您是如何阅读的?你知道这个文件的实际编码吗?