15

我想将一个 Rails 应用程序从 Ruby 1.8.7 移植到 1.9.2。一些文件在字符串和注释中都包含像 ä/ö/ü 这样的变音符号。这些文件保存为 UTF-8,但开头没有BOM (字节顺序标记)。

你可能知道,Ruby 1.9 拒绝解析这些文件,给出一个invalid multibyte char (US-ASCII)

我在谷歌上搜索并阅读了很多,但唯一的解决方案似乎是

  • 插入 BOM 或
  • 插入# coding: utf-8

每个文件的开头。

我选择的编辑器 (gEdit) 似乎没有插入 BOM。我还读到拥有 BOM 是不好的做法,因为它可能会破坏某些编辑器,如果您想使用 shebang 表示法,它也会破坏 shell 脚本。

编辑:BOM 破坏了 Ruby 1.8.7 解析器,syntax error, unexpected kEND, expecting $end (SyntaxError)为文件提供了一个!

我尝试使用 ruby​​ -Eutf-8:utf-8 强制外部编码,但这似乎在调用 rake 时被忽略(我试过:/home/malte/.rvm/gems/ruby-1.9.2-p180/bin/rake测试)。

所以我的问题是:

由于 RVM 无论如何都从源代码构建 ruby​​ 1.9,是否有构建选项或补丁可以将默认编码从 US-ASCII 更改为 UTF-8

我快速查看了源代码,但找不到设置默认值的行(我不是 C 专家,很难)。

4

1 回答 1

30

我找到了一种解决方法: 设置RUBYOPT环境变量,例如通过执行

export RUBYOPT=-Ku

在你的壳里。

这将在调用 ruby​​ 时设置 -Ku 作为默认选项。您现在可以调用所有其他调用 ruby​​ 的工具,而无需担心参数。rails serverrake工作并将所有文件视为 UTF-8。无需 BOM 或魔术注释!

于 2011-03-19T04:25:32.440 回答