从ASCII-8BIT转换为UTF-8时,"\ xC2"为UTF-8

alf*_*alf 4 haml encoding ruby-on-rails rubinius

我有一个轨道项目,运行良好的MRI 1.9.3.当我尝试使用Rubinius运行时,我收到此错误app/views/layouts/application.html.haml:

从ASCII-8BIT转换为UTF-8时,"\ xC2"为UTF-8

alf*_*alf 9

原来的页面有一个无效字符(一个间隔号"·"),我发现用下面的代码(学分这个主旨这个问题):

lines = IO.readlines("app/views/layouts/application.html.haml").map do |line|
  line.force_encoding('ASCII-8BIT').encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => '?')
end

File.open("app/views/layouts/application.html.haml", "w") do |file|
  file.puts(lines)
end
Run Code Online (Sandbox Code Playgroud)

运行此代码后,我可以通过简单的方式找到有问题的字符,git diff并将代码移到# encoding: utf-8顶部的帮助文件中.我不确定为什么这不会因MRI而失败,但它应该因为我没有指定haml文件的编码.