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

Leo*_*sov 32 ruby encoding utf-8 ruby-1.9

我有一个Rails项目,里面有很多西里尔字符串.

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

是否有一种更简单的方法来告诉Ruby"这个应用程序是UTF8编码的.除非另有说明,否则请将所有和任何包含的源文件视为UTF8"?


更新:

我写了" 如何在Ruby 1.9文件中自动插入编码:UTF-8指令 ",如果需要,会自动附加编码指令.

Mla*_*vić 13

我想你也可以

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


小智 12

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

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

不要将选项的" u"参数-K-U选项混淆.

-Ku : set internal and script encoding to utf-8
-U  : set internal encoding to utf-8
Run Code Online (Sandbox Code Playgroud)

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

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

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


Jos*_*Lee 4

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

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

  • 要求显式编码是好的。然而,Ruby 隐式地为所有文件选择 ASCII-8BIT。应该可以明确设置不同的默认值。例如,对于完全使用 UTF-8 字符串的应用程序,必须在每个文件中包含魔术注释是没有意义的,是吗? (2认同)