我正在尝试运行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机器.
我知道关于这个错误有很多类似的问题,我已经尝试了很多没有运气的问题.我遇到的问题涉及字节\xA1并且正在抛出
ArgumentError:UTF-8中的无效字节序列
我试过以下但没有成功:
"\xA1".encode('UTF-8', :undef => :replace, :invalid => :replace,
:replace => "").sub('', '')
"\xA1".encode('UTF-8', :undef => :replace, :invalid => :replace,
:replace => "").force_encoding('UTF-8').sub('', '')
"\xA1".encode('UTF-8', :undef => :replace, :invalid => :replace,
:replace => "").encode('UTF-8').sub('', '')
Run Code Online (Sandbox Code Playgroud)
每一行都为我抛出错误.我究竟做错了什么?
更新:
上述行仅在IRB中失败.但是,我修改了我的应用程序,使用相同的String#encode方法和参数对CVS文件的行进行编码,从文件中读取行时出现相同的错误(注意:如果对同一个字符串执行操作,它会起作用没有使用IO).
bad_line = "col1\tcol2\tbad\xa1"
bad_line.sub('', '') # does NOT fail
puts bad_line # => col1 col2 bad?
tmp = Tempfile.new 'foo' # write the line to a file to emulate real problem
tmp.puts bad_line
tmp.close
tmp2 = Tempfile.new …Run Code Online (Sandbox Code Playgroud)