Rails错误:" \ xE4"其次是" l"在UTF-8上

时间:2016-07-11 13:04:45

标签: ruby-on-rails ruby ruby-on-rails-4 utf-8

当我使用链接标记 javascript_include_tag stylesheet_link_tag 在rails 4.2.6上加载css或js文件时我收到错误:

在/ app处编码:: InvalidByteSequenceError " \ XE4"其次是" l"在UTF-8上

我之前从未见过这个错误。当我使用html脚本加载这些相同的文件时:

<script src="/assets/app/functions.js"></script>

然后它有效。

我的 app / assets / javascripts / application.js 是:

//= require jquery
//= require jquery_ujs
//= require turbolink__s EDITED
//= require__tree .  EDITED

之前有人遇到过这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

好的,既然你似乎不理解评论中的简短解释,我会把它作为答案。

puts "\xE4".force_encoding('ISO-8859-1').encode('UTF-8')
#⇒ ä

也就是说,您的样式表中的一个(或多个)或一个(或多个)javascripts都以ISO-8859-1编码存储。 Ruby默认尝试读取UTF-8中的所有内容。您应该找到导致问题的文件,在任何编辑器中打开它并保存回UTF-8编码。

您也可以使用smth进行批量更新,例如

Dir['*/**/*.js', '*/**/*.css'].each do |f|
  File.write f, File.read(f).force_encoding('ISO-8859-1').encode('UTF-8')
end

请注意,如果任何文件包含有效的utf-8,批量更新可能会导致相反的问题。