【问题标题】:Make Ruby 1.9 regard all source files to be UTF-8 encoded. (Even if recompiling the interpreter is necessary)使 Ruby 1.9 将所有源文件视为 UTF-8 编码。 (即使需要重新编译解释器)
【发布时间】:2011-07-18 14:40:41
【问题描述】:

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

您可能知道,Ruby 1.9 refuses to parse these files,提供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 专家,很难)。

【问题讨论】:

    标签: encoding compilation ruby-1.9.2


    【解决方案1】:

    我找到了一个解决方法: set the RUBYOPT environment variable,例如通过执行

    export RUBYOPT=-Ku

    在你的外壳中。

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

    【讨论】:

    • 非常感谢。这是我在工厂中使用 UTF-8 字符运行测试的唯一方法。
    • 显然,-Ku 选项将被弃用。 default_internal 和 default_external 编码适用于输入和输出。但是,他们不设置文件编码。 AFAIK,文件编码只能使用 BOM 或魔术注释设置。
    • @jpgeek 无需担心弃用;从 ruby​​ 2.0 开始,默认的源文件编码是 UTF-8,所以你甚至不需要-Ku
    • @Kelvin 我在 2.2.0(-preview1) 上遇到了一些错误,并且 -Ku 修复了它,但我对使用(显然?)不推荐使用的东西感到难过......跨度>
    • @Ven 我不知道该告诉你什么,因为我没有安装 2.2。如果您在 2.1 上没有问题(安装在相同的系统和相同的环境中),则可能是 2.2 的错误。除非您愿意进行深入的故障排除,否则我建议您使用生产就绪版本。
    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多