相关疑难解决方法(0)

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

我正在尝试运行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机器.

ruby error-handling utf-8

18
推荐指数
1
解决办法
3万
查看次数

字符串#code不能修复"UTF-8中的无效字节序列"错误

我知道关于这个错误有很多类似的问题,我已经尝试了很多没有运气的问题.我遇到的问题涉及字节\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)

ruby unicode utf-8 ruby-1.9

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

ruby ×2

utf-8 ×2

error-handling ×1

ruby-1.9 ×1

unicode ×1