2011-01-17 43 views
1

Mac OS XでRuby 1.8.7を使用しています。RubyでASCIIからEBCDICへの変換を行うにはどうしたらいいですか?

ASCIIをEBCDICエンコーディングに変換して、レガシーシステムと通信する方法を教えてください。 jrubyに使用する必要がありますか?

+0

あなたは私の頭を傷つけるよ! –

+0

最初の提案は、iconvがEBCDICをサポートしていないことを除いて、 'iconv'を使うことです。これは何年もの間問題となっています。 : -/ –

+0

@マークなぜURの頭を傷つける質問ですか? – Surya

答えて

1

あなたはコードセットとしてEBCDIC-USを指定する(2 + Ruby用)ルビーiconv library(2.0の前にRuby用のバージョン)またはiconv gemを使用する必要があります。

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 ")"が表示されているようです。 On OSX – Surya

+0

あなたは使用しているiconvのバージョンを知ることができますか? –

+0

私は1.11を使用しています。 – Surya

2

あなたがアップグレードすることができますが、それは必ずしもありません問題を解く。

EBCDIC(THANK YOU IBM!)のフレーバーは複数ありますので、メインフレームで使用するサブセットを特定する必要があります。

メインフレームでプログラミングするときに私が学んだことの一つは、何年も前のことですが、メインフレームのシステム担当者を呼び出して頭脳を選ぶことでした。彼らは一日中他のコードセットからEBCDICへの変換を扱い、恐らくそれを実行できるツールを持っています。

代わりに、JSONまたはYAMLを解析できるものがあるかどうかを確認することもできます。テキストをUTF-8に変換し、メインフレームに送信し、翻訳者がUTF-8からEBCDICに変換できるようにします。

+1

Amen to "(ありがとう、IBM!)" EBCDICを開発したIBMの仕事と経験がなければ、私たちは現代の7ビットASCIIをどれくらいの長さで知っているのでしょうか。そしてその経験は、組織の初めからユニコードコンソーシアムへの貢献に貢献しました。私たちは今日、はるかに悪い形になるだろう。しかし、あなたは正しい。関連するメインフレーム・ユーザーのEBCDIC CCSIDを識別し、必要でない場合でも実行することが必要な場合があります。 (「メインフレーム」ではないかもしれませんが、そのアイデアは依然として関連しています)。もしそうでなければ、UTF-8は良い仲介者です。 – user2338816

+0

Pythonでは、 "123" .decode( "UTF-8")、encode( "IBM500")など、必要なフレーバーは通常037、500と同じくらい簡単です。インターナショナルは、DB2ユニコードサポート。それではなぜこれはEncodingではないのですか? – mckenzm

関連する問題