为什么我的Ruby(2.2.2)使用ASCII-8而不是UTF-8

时间:2015-08-10 19:59:22

标签: ruby utf-8 character-encoding ascii ruby-2.0

我遇到的最近的问题是,在我的应用中,这些错误发生在JSON#转储调用中:

Encoding::UndefinedConversionError ("\xEF" from ASCII-8BIT to UTF-8):

我试图更好地理解Ruby的编码问题。我到处都读到,从Ruby 2.0开始,UTF-8是默认编码。但我发现:

 > RUBY_VERSION
 => "2.2.2"
 > __ENCODING__
 => #<Encoding:US-ASCII>

我知道RUBYOPT env变量是一个解决方案,但是因为我必须在许多开发人员和一些生产者之间协调这个解决方案。升级服务器,我真的很想先填好我的理解漏洞。

我有一个bash实用程序&#34;文件&#34;正确地指出是utf-8:

[none] andrew@~/ws$ file sample.txt
sample.txt: UTF-8 Unicode text

但这在ruby中没有达到预期的效果。

[none] andrew@~/ws$ irb
 > text = File.read("sample.txt")
 => "\xE2\x99\xAA It seems today\nthat all you see \xE2\x99\xAA\n"
 > text.encoding
 => #<Encoding:US-ASCII>

当然,有很多手动方法可以做到这一点:

 > Encoding.default_external = Encoding.list[1]
 => #<Encoding:UTF-8>
 > text = File.read("sample.txt")
 => "♪ It seems today\nthat all you see ♪\n"

但是为什么我默认不会得到utf-8?现在我可能会在初始化程序中执行类似上面的操作,但我真的希望了解ruby中正在发生的事情。是否有一些环境变量或设置我应该寻找我可能错过的($ RUBYOPT在我的本地环境中是空白的)?

0 个答案:

没有答案