Кодировка Ruby UTF-8 не работает в Windows даже с Magic Comment - PullRequest
2 голосов
/ 24 февраля 2012

Я пытаюсь запустить файл (ruby anyfile.rb в командной строке cmd) со следующим содержимым:

# encoding: utf-8
puts 'áá'

происходит следующая ошибка:

invalid multibyte char (UTF-8)

Кажетсячто Руби не понимает магический комментарий ...

РЕДАКТИРОВАТЬ: Если я уберу "# encoding: utf-8" и запусту командную строку, как это:

ruby-E:UTF-8 encoding.rb

тогда это работает - есть идеи?

EDIT2: когда я бегу:

ruby -e 'p [Encoding.default_external, Encoding.default_internal]'

я получил [# Кодировка: CP850, ноль] , может быть мой Encoding.default_external неправильный?!

Среда:

  • Windows XP (да, я тоже ненавижу windows + ruby)
  • ruby1.9.2p180 (2011-02-18) [i386-mingw32]

Ответы [ 4 ]

3 голосов
/ 24 февраля 2012

Я полагаю, что это классический случай "если вы слышите копыта, думайте, лошади, а не зебры".

Сообщение об ошибке говорит о том, что в вашем файле есть последовательность байтов, которая не является допустимой многобайтовой последовательностью UTF-8.

Возможно, что

Кажется, что Руби не понимает магический комментарий ...

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

Или, на самом деле - это недопустимая многобайтовая последовательность UTF-8 в вашем файле.

Что вы считаете более вероятным? На вашем месте я бы проверил свое дело.

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

Время от времени я сталкивался с подобными проблемами с файлами, которые не были сохранены как UTF-8, даже когда магический комментарий так заявляет.

Я обнаружил, что в Ruby 1.9.2 были проблемы справильно преобразовать UTF-8 в кодовые страницы 850 и 437, значения по умолчанию для командной строки в Windows.

Я рекомендую обновить до Ruby 1.9.3 (последний - это уровень исправления 125), который решает множество проблем кодирования, особеннов Windows.

Кроме того, чтобы убедиться, что сохраненный файл не содержит спецификацию Unicode (поэтому это UTF) и правильно сохранен.

Чтобы убедиться в этом, вы можете переключить кодовую страницув консоли, чтобы Unicode (chcp 65001) и попробуйте type myscript.rb

Вы должны видеть буквы с акцентом правильно.

И последнее, но не менее важное, убедитесь, что ваша командная строка использует такой расширенный шрифт TrueTypeсимволы отображаются правильно.

Надеюсь, это поможет.

0 голосов
/ 24 февраля 2012

Вы уверены, что выбрали «UTF-8» в раскрывающемся списке «Кодировка» при сохранении файла в блокноте? Я только что попробовал это на машине с XP, и ваш пример кода работал для меня.

0 голосов
/ 24 февраля 2012

Попробуйте

# encoding: iso-8859-1

Не все, что является текстом, это utf8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...