Отправляет email-рассылки с помощью сервиса Sendsay

[prg] Ruby and unicode

Vande omentaina, illi!
Господа, вот какой вопрос мучает:
Везде сказано, что ruby поддерживает unicode, начиная с версии 1.9.
У меня ruby 1.9.3p125 (2012-02-16) [i386-mingw32].
При попытке запустить такой файл:

# Hello.rb
puts 'Привет сообществу!'
puts 'Bonjour communaute'!'

(Там на самом деле последняя буква E acute, subscribe.ru её не
пропустит, скорее всего)
получаю следующие результаты:
1. Если сохранить в utf-8 without BOM, выходит вот такое:

C:\Users\Menelion\Documents>ruby hello.rb
hello.rb:1: invalid multibyte char (US-ASCII)
hello.rb:1: invalid multibyte char (US-ASCII)

2. Если сохранить с BOM, всё выводит, но теряется латинская диакритика.

Пробовал гуглить, ничего не нахожу по теме.
Может, юникод надо как-то заявить, как в Питоне, к примеру?
Спасибо заранее!

--
Tenna rato. Menelion Elensuule. Черкассы, Украина.
Skype: Francophile
Twitter: http://twitter.com/m_elensule
Подкаст об общедоступности: http://a11y.podfm.ru/

Ответить   Tue, 7 Aug 2012 00:59:06 +0300 (#2524351)

 

Ответы:

Приветствую всех.

Для указания кодировки исходного кода в первой строке файла помещают
# encoding: UTF-8
См.
http://en.wikibooks.org/wiki/Ruby_Programming/Encoding

Как вариант, дело может быть в кодовой странице вашей консоли. В русской Windows
это 866, а в ней вряд ли представлена диакритика.

Успехов. Анатолий.

Ответить   "i_chay" Tue, 7 Aug 2012 07:31:28 +0400 (#2524486)

 

Vande omentaina, i_chay!

Винда английская).
Спасибо за подсказку. Теперь всё выводит и без BOM, но диакритика
также теряется.
Говорят, что терминал Windows - штука вообще несовершенная. Я тут
напоролся на то, что он (терминал) не выводит символ евро. Народ
советует использовать Cygwin, но я пока с ним не разобрался :-(.

Ответить   Tue, 7 Aug 2012 11:48:48 +0300 (#2524784)

 

Приветствую всех.

Значение имеет лишь то, присутствует ли нужный вам символ среди символов текущей
кодовой страницы.
Если отсутствует, то надо сменить кодовую страницу, предварительно убедившись,
что в новой странице ваш символ присутствует, а сама страница доступна в вашей
операционной системе.
Кроме того, визуально имеет значение, какой шрифт установлен в текущей консоли.
Все это на английской интерлингве изложено в MSDN.

Не совсем понятно, что подразумевается под словом "терминал": это консольная
оболочка cmd.exe в чистом виде или консольное окно, которое создается во время
выполнения скрипта (или так называемого "консольного приложения"?

В ruby есть класс-обертка для доступа к функциям WinAPI для создания и управления
консолью:
http://ru.wikibooks.org/wiki/Ruby/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA/Windows::Console

Ссылка - одна неразрывная строка); привел её лишь для демонстрации сигнатур.
полезное описание там отсутствует.

Нет ничего такого, что может сделать с консолью cygwin и чего не может сделать
любой программист (в крайнем случае см. исходники cygwin).

Успехов. Анатолий.

Ответить   "i_chay" Wed, 8 Aug 2012 15:57:03 +0400 (#2525736)