У меня есть простой постоянный хэш со строковыми ключами определено:хэш строки получить неправильно закодирован
MY_CONSTANT_HASH = {
'key1' => 'value1'
}
Теперь, я заметил, что encoding.name
на ключ является US-ASCII
. Однако Encoding.default_internal
установлен на UTF-8
заранее. Почему это неправильно кодируется? Я не могу force_encoding
позже, так как объект заморожен в этой точке, так что я получаю эту ошибку:
can't modify frozen String
PS: Я использую рубин 1.9.3p0 (2011-10-30 ревизия 33570) ,
Является ли это официальным способом установки кодировки для встроенных строк? Кроме того, по ссылке вы можете прочитать следующее: «В качестве кодирования созданных строк используется кодировка локали (__ ENCODING __), а не default_internal». – m33lky
@ m33lky: Я думаю, что взлом «волшебного комментария» является таким же официальным, как и он, есть и другие варианты. Единственная проблема в зависимости от настроек языкового стандарта заключается в том, что они являются внешними по отношению к приложению или исходному файлу, поэтому вы можете получить странные нелокальные эффекты, если вы измените свой язык, работаете с другого компьютера, забудьте установить локаль на сервере , ... –