ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

EBCDIC to SJISはcp500で出来るらしい

ふと日中思いついたのを思い出した。ので、こんなコードを書いてみる。

public class test
{
	public static void main(String[] args) throws Exception
	{
		byte[] bArray = {0x40, (byte)0xF1, (byte)0xF2, (byte)0xF3};
		System.out.println(new String(bArray, "cp500"));
	}
}

結果はこんな感じ。

C:\moge>java -classpath . test
 123

C:\moge>

期待通り、半角スペース、'1'、'2'、'3'を出力している。
で、ちょっと調べたら、こんなページが出てきた。ASTERIAのドキュメントらしい。
http://infosupport.infoteria.co.jp/asbook/asbook600_appendix.html
これによると、

CP500とはiso-8859-1との間で制御文字も含めて相互変換が可能なコード体系(いわゆる英語圏のEBCDIC)です。

とのことで、CP500は漢字サポートしていないらしい。
ASTERIAでは別途、製品固有の漢字エンコーディングをサポートしているらしい。えらいねえ。
というわけで、わざわざ自分で変換テーブル作らなくても、CP500を使ってれば良かったんじゃんってことが判明。ますます最初からCじゃなくてJavaで作ってればなぁと後悔する。
それにしても、javaのbyte型は-128〜127の範囲で値を持つ*1から、コード値的には128以上の値を持たせようと思ったらキャストするしかないから不便ですね。(unsignedがないからうんぬんってことです。)