为 Ruby 1.9 设置全局默认编码

12

我希望告诉 Ruby,在没有特别说明的情况下,一切都是 utf8 编码,这样我就不必到处添加 # encoding: utf-8 注释了。

3个回答

16

1
#1 不太可移植,#2 不太好看,但至少是自动的 :) - grosser
1
#1 在 Windows 10 + Ruby 2.2 上导致我的 Ruby 键盘崩溃。也就是说,一旦我尝试输入任何重音符号,键盘就会在 Ruby 控制台上停止工作(除了中断键)。 - Cyril Duchon-Doris
@Cyril Duchon-Doris 这个回答是针对 Ruby 1.9 的,因为自从 Ruby 2 开始,UTF-8 是默认编码。 - tommasop

14

如果您正在使用环境变量,通常的方法是使用 LC_ALL / LANG

如果都未设置:则回退到 US-ASCII

$ LC_ALL= LANG= ruby -e 'p Encoding.default_external'
#<Encoding:US-ASCII>

使用其中一个值:将使用该值

$ LC_ALL=en_US.UTF-8 LANG= ruby -e 'p Encoding.default_external'
#<Encoding:UTF-8>

$ LC_ALL= LANG=en_US.UTF-8 ruby -e 'p Encoding.default_external'
#<Encoding:UTF-8>

两者都设置时:LC_ALL 优先级更高

$ LC_ALL=C LANG=en_US.UTF-8 ruby -e 'p Encoding.default_external'
#<Encoding:US-ASCII>

$ LC_ALL=en_US.UTF-8 LANG=C ruby -e 'p Encoding.default_external'
#<Encoding:UTF-8>

如果有人需要在整个系统中添加编码,则这是正确的答案。 - Saurabh Bhatia
如果我的系统上没有LC_ALL环境变量怎么办?当我尝试使用它时,它会显示LC_ALL未定义。 - desbest
以上示例是Shell代码,而不是Ruby代码。要在Ruby中检查LC_ALL的值,请使用ENV['LC_ALL'] - Arne Brasseur

0

我刚从1.9升级到2.0,但由于某种原因,默认的外部编码仍然设置为ASCII。我通过在终端中输入以下内容来解决这个问题:

export RUBYOPT='-E utf-8'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接