Ruby 1.9.2: irb бросает ArgumentError: неверная последовательность байтов в UTF-8 при входе в немецкий Umlaut - PullRequest
9 голосов
/ 13 февраля 2011

Я хочу ввести немецкий умлаут в свой irb, но получаю странную ошибку. Я могу ввести любой символ äöü без проблем, но каждый из ÄÖÜß приводит к следующей ошибке:

$ irb
ruby-1.9.2-p136 :001 > ? # here I entered Ü but it displays only ?
/Users/lorenz/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/irb/ruby-lex.rb:728:in
`block in lex_int2': invalid byte sequence in UTF-8 (ArgumentError)

Я рассмотрел много SO вопросов, касающихся Ruby, rvm и UTF-8, но ни один не помог. Большинство из них привязаны к рельсам или конфигурации базы данных. Я специально проверил следующее:

языковой стандарт установлен правильно

$ locale
LANG="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_ALL="de_DE.UTF-8"

Terminal.app установлен в Unicode (UTF-8), а Encoding.default_external установлен правильно:

$ irb
ruby-1.9.2-p136 :001 > Encoding.default_external
 => #<Encoding:UTF-8>

Почему это так сложно в Ruby?

Ответы [ 3 ]

2 голосов
/ 27 марта 2011

Я не знаю, как решить проблему, но уверен, что это единственное, что есть в irb, я заметил, что irb много раз имеет свой собственный уникальный способ работы с пользовательскими данными (это может даже быть ограничением в readline)и он хорошо работает только с некоторыми символами.

Вы можете сделать простой тест, чтобы проверить это, создать новый файл rb с:

# encoding: utf-8
puts "test: Ü"

и выполнить его, это работает?

Несмотря на то, что это все еще неприятность, для меня до сих пор не достаточно большая проблема, чтобы действительно пытаться найти решение.

2 голосов
/ 07 марта 2011

Обычно для файла устанавливается кодировка # coding: UTF-8.

В случае irb может потребоваться установить его заранее и явно:

irb -E UTF-8:UTF-8

Это позволит установить внутреннюю и внешнюю кодировку в UTF-8 на irb.

Или дополнительно попробуйте

irb -U

, который устанавливает внутреннюю кодировку в UTF-8.

0 голосов
/ 29 апреля 2011

Если вы работаете в Mac OS, это может быть проблемой чтения строки.См http://henrik.nyh.se/2008/03/irb-readline.

...