使用rails资产管道在javascript文件中编码问题

spi*_*ike 10 ruby ruby-on-rails ruby-on-rails-3.1 asset-pipeline

我正在使用rails 3.1和资产管道(ruby 1.9.2).

尝试提供js.erb具有utf-8编码字符串的javascript 文件时出现以下错误

invalid byte sequence in US-ASCII
Run Code Online (Sandbox Code Playgroud)

我已经Encoding.default_external = "UTF-8"在我的environment.rb文件中设置了.如何让资产管道使用不同的编码?

编辑

当我在文件外部生成utf-8字符时(此时通过从DB查询),只会显示错误.如果我添加,错误消失了

<% "?" %>
Run Code Online (Sandbox Code Playgroud)

到文件的顶部.我猜这里有某种编码猜测,但如果没有那种hacky解决方案,我该如何避免呢?

Fra*_*ane 19

加载文件时,Ruby会尝试"猜测"其编码.如果未找到UTF-8或任何其他非ASCII字符,则它使用US-ASCII作为文件的编码,如果突然遇到非ASCII字符(例如在运行时加载),则会引发错误.

解决此问题的最佳方法是通过添加# encoding: utf-8.rb文件的第一行或者<%# encoding: utf-8 %>如果它是.erb文件来强制Ruby使用某种编码 .

  • AFAIK没有办法做这个系统.但是使用Ruby 2.0时,默认编码从ASCII更改为UTF-8.因此,使用Ruby 2.0,这应该是过去的问题.见:http://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0-is-released/ (2认同)