使Ruby 1.9将所有源文件视为UTF-8编码.(即使需要重新编译解释器)

Mal*_*lte 15 encoding compilation ruby-1.9.2

我想将一个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专家,很难).

Mal*_*lte 30

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

export RUBYOPT=-Ku

在你的shell中.

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

  • 显然,-Ku选项将被弃用.default_internal和default_external编码适用于输入和输出.但是,它们不会设置文件编码.AFAIK,文件编码只能使用BOM或魔术注释进行设置. (3认同)