хеш-строки неправильно закодированы - PullRequest
3 голосов
/ 04 февраля 2012

У меня есть простой постоянный хеш с определенными строковыми ключами:

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

Теперь я заметил, что encoding.name на ключе - US-ASCII. Однако Encoding.default_internal заранее установлено на UTF-8. Почему он не кодируется должным образом? Я не могу force_encoding позже, потому что объект заморожен в этой точке, поэтому я получаю эту ошибку:

can't modify frozen String

P.S .: Я использую ruby ​​1.9.3p0 (редакция 2011-10-30 33570).

1 Ответ

2 голосов
/ 04 февраля 2012

Стандартные внутренние и внешние кодировки предназначены для операций ввода-вывода:

  • 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.

...