33

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

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

有没有更简单的方法告诉 Ruby“这个应用程序是 UTF8 编码的。除非另有声明,否则请考虑所有和任何包含的源文件为 UTF8”?


更新:

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

4

7 回答 7

13

我想你也可以

  1. 使用-E utf-8命令行参数ruby,或
  2. 将您的RUBYOPT环境变量设置为"-E utf-8"
于 2010-07-20T15:35:46.290 回答
12

在我看来,显式并不总是比隐式好。

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

不要将选项的“ 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 命令行选项。

于 2012-01-20T15:09:13.927 回答
4

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

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

于 2010-07-20T14:34:39.643 回答
4

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

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

文档:*如果这是非零,则在保存时插入一个神奇的 emacs 'coding' 注释。

您可以自定义此变量。

我敢肯定其他编辑也有类似的情况。当然,这仍然意味着将魔术注释添加到每个文件中,但至少编辑器会自动为您执行此操作,而无需您记住。

于 2011-05-18T11:19:22.100 回答
4

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

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

于 2011-06-17T13:41:22.613 回答
1

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

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

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

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

(确保调整路径)

于 2011-05-18T10:41:38.190 回答
0

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

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

于 2010-07-20T14:46:21.630 回答