Rails全局编码配置?

时间:2011-08-05 13:14:22

标签: ruby-on-rails-3 encoding utf-8 initialization

我正在开发一个包含西班牙语字符串的Rails项目:ñ, á, é, í, ó, ú, etc

我必须在每个包含这些字符的文件的顶部使用“编码”注释(# coding: utf-8),以避免在运行应用程序时出错。

如何在全局设置此选项,而不是在每个文件中键入此注释?我想它应该放在初始化器或环境文件中。

1 个答案:

答案 0 :(得分:3)

詹姆斯·爱德华·格雷(James Edward Gray)在这个主题上有一个很好的blog post

您不应该全局设置:您的源文件可能是utf-8编码的,但您正在使用的某个gem的作者可能使用了Shift JIS或其他东西。这将以大爆炸结束。

中间解决方案是使用rake任务来检查是否存在魔术评论,如果不存在则添加它(代码从this blog post无耻地被盗):

desc "Manage the encoding header of Ruby files"
task :check_encoding_headers => :environment do
  files = Array.new
  ["*.rb", "*.rake"].each do |extension|
    files.concat(Dir[ File.join(Dir.getwd.split(/\\/), "**", extension) ])
  end

  files.each do |file|
    content = File.read(file)
    next if content[0..16] == "# coding: utf-8\n\n"

    ["\n\n", "\n"].each do |file_end|
      content = content.gsub(/(# encoding: utf-8#{file_end})|(# coding: utf-8#{file_end})|(# -*- coding: utf-8 -*-#{file_end})/i, "")
    end

    new_file = File.open(file, "w")
    new_file.write("# coding: utf-8\n\n"+content)
    new_file.close
  end
end