2011-01-17 1 views
1

Я использую Ruby 1.8.7 на Mac OS X.Как сделать перевод ASCII в EBCDIC в Ruby?

Как преобразовать ASCII в кодировку EBCDIC для связи с устаревшей системой. Должен ли я использовать для jruby?

+0

У вас болит голова! –

+0

Первым предложением было бы использовать 'iconv', но, похоже, iconv не поддерживает EBCDIC; Это проблема уже много лет. : -/ –

+0

@Mark почему вопрос, ущемляющий голову ура? – Surya

ответ

1

Вы должны использовать рубин iconv library (для Ruby, версии до 2.0) или iconv gem (для Ruby, 2+) с указанием EBCDIC-США в качестве кодировки:

irb(main):001:0> require('iconv') 
=> true 
irb(main):002:0> x=Iconv.new('EBCDIC-US','ASCII') 
=> #<Iconv:0x7fb4274d88d8> 
irb(main):003:0> x.iconv("foo") 
=> "\206\226\226" 
+0

Кажется, я получаю «Iconv :: InvalidEncoding: неверное кодирование (« ascii »,« EBCDIC-US »)». В OSX – Surya

+0

Можете ли вы узнать, какую версию iconv вы используете? –

+0

Я использую 1.11. Похоже на ineed для обновления – Surya

2

Вы можете модернизировать, но это не обязательно решать проблему.

Существует несколько разновидностей EBCDIC (СПАСИБО ВАС IBM!), Поэтому вам нужно будет определить подмножество, используемое вашим мэйнфреймом.

Одна вещь, которую я научился делать при программировании на мэйнфрейме, о много лет назад, заключалась в том, чтобы вызвать некоторые из сисопов мейнфреймов и выбрать их мозги. Они занимаются конверсией из других кодов в EBCDIC в течение всего дня и, вероятно, имеют инструмент, который может сделать это «на лету».

Альтернативой было бы увидеть, есть ли у них что-то, что может анализировать JSON или YAML. Преобразуйте текст в UTF-8, отправьте его на мэйнфрейм, передайте его переводчику из UTF-8 в EBCDIC.

+1

Amen to "(СПАСИБО IBM!)". Без работы и опыта IBM по разработке EBCDIC мы могли бы застрять в своей современной 7-битной ASCII, кто знает, как долго. И опыт помог с их вкладом в Консорциум Unicode с самого начала организации. Сегодня мы, вероятно, будем в гораздо худшем состоянии. Но ты прав; возможно, необходимо определить CCSID EBCDIC для соответствующих пользователей мэйнфреймов и сделать хорошую работу, даже если это не необходимо. (Хотя это может и не быть «мэйнфреймом», идея по-прежнему актуальна.) И если нет, UTF-8 является хорошим посредником. – user2338816

+0

В python это так же просто, как «123» .decode («UTF-8»). Encode («IBM500») или любой другой вкус, который вам нужен, обычно 037, 500 International пользуется популярностью из-за того, что он широко используется для поддержки unicode DB2 , Так почему же это не в Encoding.aliases для ruby? – mckenzm