Я использую Ruby 1.8.7 на Mac OS X.Как сделать перевод ASCII в EBCDIC в Ruby?
Как преобразовать ASCII в кодировку EBCDIC для связи с устаревшей системой. Должен ли я использовать для jruby?
Я использую Ruby 1.8.7 на Mac OS X.Как сделать перевод ASCII в EBCDIC в Ruby?
Как преобразовать ASCII в кодировку EBCDIC для связи с устаревшей системой. Должен ли я использовать для jruby?
Вы должны использовать рубин 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"
Вы можете модернизировать, но это не обязательно решать проблему.
Существует несколько разновидностей EBCDIC (СПАСИБО ВАС IBM!), Поэтому вам нужно будет определить подмножество, используемое вашим мэйнфреймом.
Одна вещь, которую я научился делать при программировании на мэйнфрейме, о много лет назад, заключалась в том, чтобы вызвать некоторые из сисопов мейнфреймов и выбрать их мозги. Они занимаются конверсией из других кодов в EBCDIC в течение всего дня и, вероятно, имеют инструмент, который может сделать это «на лету».
Альтернативой было бы увидеть, есть ли у них что-то, что может анализировать JSON или YAML. Преобразуйте текст в UTF-8, отправьте его на мэйнфрейм, передайте его переводчику из UTF-8 в EBCDIC.
Amen to "(СПАСИБО IBM!)". Без работы и опыта IBM по разработке EBCDIC мы могли бы застрять в своей современной 7-битной ASCII, кто знает, как долго. И опыт помог с их вкладом в Консорциум Unicode с самого начала организации. Сегодня мы, вероятно, будем в гораздо худшем состоянии. Но ты прав; возможно, необходимо определить CCSID EBCDIC для соответствующих пользователей мэйнфреймов и сделать хорошую работу, даже если это не необходимо. (Хотя это может и не быть «мэйнфреймом», идея по-прежнему актуальна.) И если нет, UTF-8 является хорошим посредником. – user2338816
В python это так же просто, как «123» .decode («UTF-8»). Encode («IBM500») или любой другой вкус, который вам нужен, обычно 037, 500 International пользуется популярностью из-за того, что он широко используется для поддержки unicode DB2 , Так почему же это не в Encoding.aliases для ruby? – mckenzm
У вас болит голова! –
Первым предложением было бы использовать 'iconv', но, похоже, iconv не поддерживает EBCDIC; Это проблема уже много лет. : -/ –
@Mark почему вопрос, ущемляющий голову ура? – Surya