Строковые литералы имеют ту же кодировку, что и кодировка скрипта. Вместо 'hi'.encoding
вы можете использовать ключевое слово __ENCODING__
, чтобы получить его. Кодировку скрипта можно изменить, поместив в начало вашего скрипта магический комментарий c:
# encoding: ASCII-8BIT
p __ENCODING__ # => #<Encoding:ASCII-8BIT>
Флаг -E
ruby
не влияет на кодировку строковых литералов. Это только для изменения внешней и внутренней кодировки. Вы можете прочитать о различных типах кодировок и их назначении в документации Encoding
.
Назад к кодированию строковых литералов: даже если irb
заявляет свой флаг -E
"То же самое, что ruby -E
", что не соответствует действительности. Он использует внешнюю кодировку в качестве кодировки скрипта. irb
уже имеет несколько ограничений. Это может быть одним из них. По крайней мере, это ошибка документации.
Помимо комментария magi c, есть и другой обескураживающий способ установить кодировку скрипта с помощью ruby
: флаг -K
и код n
(нет). ruby -Kne "p __ENCODING__"
должен напечатать #<Encoding:ASCII-8BIT>
. Однако -K
также изменяет внешнюю кодировку.