哈希字符串得到不正确的编码

时间:2012-02-03 21:14:40

标签: ruby encoding utf-8 ruby-1.9

我有一个简单的常量哈希,定义了字符串键:

MY_CONSTANT_HASH = {
'key1' => 'value1'
}

现在,我注意到密钥上的encoding.nameUS-ASCII。但是,Encoding.default_internal预先设置为UTF-8。为什么没有正确编码?我以后不能force_encoding,因为该对象在那时被冻结,所以我得到了这个错误:

can't modify frozen String

P.S。:我正在使用ruby 1.9.3p0(2011-10-30修订版33570)。

1 个答案:

答案 0 :(得分:2)

默认internalexternal编码针对IO操作:

  • CSV
  • 从磁盘读取的文件数据
  • Dir的文件名
  • 等...

最简单的方法是添加# encoding=utf-8注释,告诉Ruby源文件是UTF-8编码的。例如,如果你运行这个:

# encoding=utf-8
H = { 'this' => 'that' }
puts H.keys.first.encoding

作为一个独立的Ruby脚本,你将获得UTF-8,但如果你运行它:

H = { 'this' => 'that' }
puts H.keys.first.encoding

你可能会得到US-ASCII。