Ruby 1.9 - недопустимый многобайтовый символ (utf-8) - PullRequest
1 голос
/ 29 марта 2011

У меня есть файл ruby ​​только с двумя строками:

# encoding: utf-8
puts "—"

Когда я запускаю его с ruby test_enc.rb, происходит сбой с:

test_enc.rb:2: invalid multibyte char (UTF-8)
test_enc.rb:2: unterminated string meets end of file

Я не знаю, как правильно указать код символа (emdash), но vim говорит мне, что это 151, Hex 97, Octal 227. Он не работает так же, как и другие символы, такие как ã, поэтому я сомневаюсь, что это связано именно с этим персонажем. Я работаю в Windows XP и использую версию ruby:

ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32]

Я чувствую, что здесь есть что-то очень очевидное, чего мне не хватает. Есть идеи?

РЕДАКТИРОВАТЬ: Извлек ценный урок о допущениях сегодня - особенно если предположить, что ваш редактор использует UTF-8, фактически не проверяя его. Oops!

Спасибо за быстрый и точный ответ всем!

ВНОВЬ РЕДАКТИРОВАТЬ: «Правильная настройка vim для utf-8» стала слишком большой и на самом деле не имела отношения к этому вопросу, поэтому теперь это отдельный вопрос .

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Учитывая, что Ruby явно обращает ваше внимание на UTF-8, я сильно подозреваю, что вы на самом деле не написали файл UTF-8 для начала. Убедитесь, что Vim (или любой другой текстовый редактор, который вы используете для создания файла) действительно настроен на запись UTF-8.

Обратите внимание, что в UTF-8 любой не-ASCII символ будет представлен несколькими байтами, а не одним байтом, как вы описали в диагностике Vim. Я бы порекомендовал использовать редактор двоичных файлов (или дамп, или что-то еще), чтобы действительно показывало, что находится в текстовом файле. Что-то, что еще не имеет некоторого предвзятого представления о кодировке - что-то, что даже не пытается воспринимать это как текстовый файл.

Блокнот позволяет вам записать файл в UTF-8, так что вы можете попробовать это просто, чтобы посмотреть, что произойдет. (У меня не установлен Ruby, иначе я бы попробовал его для вас.)

3 голосов
/ 29 марта 2011

Ваш файл в латинице.Ruby прав.

emdash будет кодироваться двумя байтами, а не одним в UTF-8.

...