«前の日記(2007-09-02) 最新 次の日記(2007-09-12)» 編集

KONO's Diary-休むに似たり



2007-09-10 [長年日記]

_ [Ruby] EBCDIC,IBM漢字の文字コード変換

ここに取り上げる話題としては珍しいのだけど、ちょっとプログラミングの話をば。

Rubyで文字コード変換というと、Shift_JIS,JIS,EUCとunicodeなんかの相互変換ならよく見るのだけど、オフィスでは昔ながらの大型機(メインフレームやオフコン)もまだ現役だったりする。最近は「エンタープライズRuby」なんてことも言われているくらいだから、大型機の文字コード--EBCDICなどもRubyで扱いたい。さらに大型機の場合、漢字はハードのメーカーごとに違うのでややこしいし……と思っていたら、EBCDIC+IBM漢字についてはlinuxのiconvでもあっさり変換できるのだった。rubyから使うにはこんな感じ。

require 'iconv'
$KCODE="EUC"
iconv=Iconv.new('EUC-JP','IBM930')
f=open("EBCDIC.DAT")                 # EBCDICファイルオープン
ebcstr=f.read
eucstr=iconv.iconv(ebcstr)           # コード変換
p eucstr                             # EUCに変換した結果を表示
f.close

なんのことはない、'IBM930'というコード名称を知っていれば、あとはShift_JIS等との変換と同じである。 このコード名称は、たとえばHP-UX等では一部違うらしいのだけど、iconv --list等で確認すれば良いか。

ぼくが馴染みのあるオフコンはIBMの(昔でいう)AS/400なのだけど、その世界ではよく「CCSID」という表記が出てくる。 上記の「IBM930」というのはCCSID 5026のスーパーセットらしい。AS/400の日本語環境ではあとひとつ、CCSID 5035というのも多いが、こちらはIBM939という指定になる模様。

日立の汎用機の漢字コード(KEIS)、富士通(JEF)、NEC(JIPS)も、iconvがあるいは対応しているのかもしれないけど、ちょっと調べた範囲では判らなかった……。

(2007.9.13追記)
Windows版rubyでは辛かった旨別項で補足。iconvが2系統あるって知りませんでした。

[]



あわせて読みたい rss
«前の日記(2007-09-02) 最新 次の日記(2007-09-12)» 編集
カバー画像はWikimedia Commonsより。
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
画像提供元:http://commons.wikimedia.org/wiki/Image:Field_of_hay_bales_-_omeo.jpg