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

标签 ruby utf-8 error-handling

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

file_content.gsub(/dr/i,'med')

我试图用“med”替换“dr”的地方。

错误是:

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

参见“Ruby 2.0.0 String#Match ArgumentError: invalid byte sequence in UTF-8”。

关于ruby - UTF-8 中的无效字节序列 (ArgumentError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877310/

相关文章:

c# - 从 C# 中的原始 TCP 流获取 unicode 字符串

r - 使用方法错误("select_"): no applicable method for 'select_' applied to an object of class "character"

php - 模型中的 “reporting”错误

ruby-on-rails - rails.vim 安装但 :Rfind doesnt'work

ruby-on-rails - 使用 Rails 4 响应未授权 (401) 状态

python - 读取以python中不同编码选项保存的文件后的输出差异

php - 双UTF-8编码,但为什么呢? PHP/MySQL

c++ - 如何抛出 std::invalid_argument 错误?

ruby - 如何使用另一个字符串在 Ruby 中切掉一个字符串?

ruby-on-rails - 如何检查 HTTParty 生成的完整 URL?