繁体   English   中英

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

[英]How can I avoid putting the magic encoding comment on top of every UTF-8 file in 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指令 ”,如果需要,会自动附加编码指令。

我想你也可以

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

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

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

不要将-K选项的“ u ”参数与-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命令行选项。

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

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

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

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

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

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

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

您可以自定义此变量。

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

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

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

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

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

(确保适应路径)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM