如何避免在Ruby 1.9中将​​魔术编码注释放在每个UTF-8文件的顶部?

时间:2010-07-20 14:29:17

标签: ruby encoding utf-8 ruby-1.9

我有一个包含很多西里尔字符串的Rails项目。

它在Ruby 1.8上运行良好,但Ruby 1.9假定源文件是US-ASCII编码的,除非您在源文件的顶部提供# encoding: utf-8注释。此时,文件不会被视为US-ASCII

是否有更简单的方法告诉Ruby“此应用程序是UTF8编码的。除非另有说明,否则请将所有和所有包含的源文件视为UTF8”?


更新:

我写了“How to insert the encoding: UTF-8 directive automatically in Ruby 1.9 files”,如果需要,会自动附加编码指令。

7 个答案:

答案 0 :(得分:13)

我认为你可以

  1. -E utf-8命令行参数用于ruby
  2. 将您的RUBYOPT环境变量设置为"-E utf-8"

答案 1 :(得分:12)

在我看来,明确并不总是比隐含更好。

当您使用的几乎所有源代码都兼容UTF-8时,您可以使用Ruby的-Ku命令行选项轻松避免使用魔术编码注释。

请勿将u选项的“-K”参数与-U选项混淆。

-Ku : set internal and script encoding to utf-8
-U  : set internal encoding to utf-8

然后,仅在需要它的脚本中设置魔术编码注释。请记住,约定优于配置!

您可以设置环境变量RUBYOPT=-Ku

请参阅http://www.manpagez.com/man/1/ruby/上的Ruby命令行选项。

答案 2 :(得分:4)

明确比隐含更好。写出编码名称对于文本编辑器,解释器以及任何想要查看该文件的人都有好处。不同的平台有不同的默认设置 - UTF-8,Windows-1252,Windows-1251等 - 如果您自动选择一个,则会妨碍可移植性或平台集成。要求更明确的编码是一件好事。

将Rails应用程序与GetText集成可能是个好主意。然后,所有UTF-8字符串将被隔离为少量翻译文件,而您的Ruby模块将是干净的ASCII。

答案 3 :(得分:4)

有一个gem在Rails项目中需要它的每个文件上设置魔术注释:https://github.com/m-ryan/magic_encoding

您只需安装它并在项目的根目录中运行magic_encoding,问题就解决了。

答案 4 :(得分:3)

不是直接的答案,但根据您的编码环境,您可以让编辑处理事情。例如,Emacs的ruby-mode有变量ruby-insert-encoding-magic-comment

  

ruby​​-insert-encoding-magic-comment是   在`ruby-mode.el'中定义的变量   它的值是t

     

文档:   *如果这是非零,则在保存时插入魔术emacs'编码'注释。

     

您可以自定义此变量。

我确信其他编辑也有类似的东西。当然,它仍然意味着将魔术评论添加到每个文件,但至少编辑器会自动为您完成,而不是您必须记住。

答案 5 :(得分:1)

确保在运行时使用首选编码加载所有文件(源和资源)的唯一简单(和DRY!)1.9方法是使用-E命令行参数。

所有其他方法都有缺点,具体取决于您的系统(例如,无法设置ENV变量,第一方加载的第三方代码不适合使用Encoding.default_external,...)。

我的生产服务器使用以下包装脚本:

#!/bin/bash
exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "$@"

(确保调整路径)

答案 6 :(得分:0)

我没有碰到这么多,但是当我需要确保UTF-8时,我使用$ KCODE全局。试着把它放在你的环境中.rb:$KCODE = 'UTF8'

另外,您确定您的编辑器正在以UTF-8保存文件吗?