きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

x-IBM1399(EBCDIC)のEncoderについての調査

nioのEncoderをベースに調査してみた。
いちおうioの方も試しているけども・・・。

suspicious codepoint encode()=========
15	 codepoints	U+0000A	U+00085	
6F	 codepoints	U+0003F	U+0303F	U+0FFE8	U+0FFE9	U+0FFEA	U+0FFEB	U+0FFEC	U+0FFED	U+0FFEE	
0E60F10F	 codepoints	U+07E48	U+07E66	
0E5BFE0F	 codepoints	U+0688D	U+0688E	
0E53B30F	 codepoints	U+08346	U+0834A	
0E446E0F	 codepoints	U+02116	U+0F86F	
0E51F10F	 codepoints	U+067F5	U+06805	
0E61B00F	 codepoints	U+080FC	U+08141	
0E66C80F	 codepoints	U+09839	U+0983D	


上記は、canEncode(CharSequence)、encode(CharBuffer)などを使って調べてみた結果です。
一番左側に書いてるのはEncodeした結果の1399での16進バイト表現です。(SO/SI付き)


EBCDICで15はNEL(New Line)です。
U+0000A(LF)とU+00085(NEL)はEBCDICのNELにマッピングされるようです。
これはそれほど不思議ではない。EBCDICの変換ではよくあること。


6Fは?です。
U+0003Fは本物の?なので問題ない。
化けてしまったのは特殊文字の領域にいるこれらですね。
canEncodeが駄目なのか、encodeが駄目なのか、とにかくバグってそうです。
U+0303FはIdeographic Half Fill Space
U+0FFE8はHalfwidth Forms Light Vertical
U+0FFE9はHalfwidth Leftwards Arrow
U+0FFEAはHalfwidth Upwards Arrow
U+0FFEBはHalfwidth Rightwards Arrow
U+0FFECはHalfwidth Downwards Arrow
U+0FFEDはHalfwidth Black Square
U+0FFEEはHalfwidth White Circle


次に同じバイトにエンコードされたものたちがいます。
U+07E48「繈」とU+07E66「繦」
U+0688D「梍」とU+0688E「梎」
U+08346「荆」とU+0834A「荊」
U+02116「№」とU+0F86F「」 U+0F86Fはうまく表示できてないや。
U+067F5「柵」とU+06805「栅」
U+080FC「胼」とU+08141「腁」
U+09839「頹」とU+0983D「頽」
1つを除けば、似た漢字である。
これは別途、Decoderを調べる必要がありそうですな。