UTF-EBCDIC
読み:ユーティーエフ-エビシディック
外語:UTF-EBCDIC

 ISO/IEC 10646およびUnicode文字を8ビットの不定長として表現できるように変換したものの一つで、EBCDIC環境向け。
目次

概要
 これは、UTF-8の亜種の一つである。仕様は「Unicode Technical Report #16」で提案されている。
 この符号は、名前の通りEBCDICとの親和性を高めた符号である。1オクテット文字はEBCDICであり、空き領域を使って2オクテット以上の符号を埋め込んでいる。
 しかし、実際には殆ど使われていない。

仕様

符号化方法
 UnicodeからUTF-EBCDICまでは、二段階の変換過程を用いる。
 これは、ASCIIとEBCDICの仕様の違いを吸収するためで、Unicodeから作られたUTF-8似の中間形式(UTF-8-Modと呼ばれる)は、EBCDICのコードページに近いものに変換することでUTF-EBCDICとなる。
  1. Unicode→I8-Sequence (UTF-8-Mod)
  2. I8-Sequence→UTF-EBCDIC (変換)
 復号は、この逆順となる。

I8-Sequence
 まず、次のように符号化される。これは中間形式であり結果ではない。
UCS-4 (16進)I8-Sequence (2進)
00000000〜0000007F0xxxxxxx
00000080〜0000009F100xxxxx
000000A0〜000003FF110xxxxx 101xxxxx
00000400〜00003FFF1110xxxx 101xxxxx 101xxxxx
00004000〜0003FFFF11110xxx 101xxxxx 101xxxxx 101xxxxx
00040000〜003FFFFF1111100x 101xxxxx 101xxxxx 101xxxxx 101xxxxx
00400000〜03FFFFFF1111110x 101xxxxx 101xxxxx 101xxxxx 101xxxxx 101xxxxx
04000000〜7FFFFFFF1111111x 101xxxxx 101xxxxx 101xxxxx 101xxxxx 101xxxxx 101xxxxx
 UTF-8が1文字あたり6ビットを符号化するのに対し、I8-Sequenceは1文字あたり5ビットしか符号化できないため、概ねUTF-8より符号は長くなる。
 その代わり、C0とC1を含めた範囲(U+0000〜U+009F)は、EBCDICの特徴から1オクテットで表現できる。

UTF-EBCDIC

I8→EBCDIC
 ここで得られたオクテット列は、各オクテットごとに表を参照し、EBCDICコードページの相当位置に変換する。これによって、UTF-EBCDICは完成する。
 -0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F
0-00010203372D2E2F1605150B0C0D0E0F
1-101112133C3D322618193F271C1D1E1F
2-405A7F7B5B6C507D4D5D5C4E6B604B61
3-F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F
4-7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6
5-D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D
6-79818283848586878889919293949596
7-979899A2A3A4A5A6A7A8A9C04FD0A107
8-202122232425061728292A2B2C090A1B
9-30311A333435360838393A3B04143EFF
A-4142434445464748494A515253545556
B-57585962636465666768696A70717273
C-7475767778808A8B8C8D8E8F909A9B9C
D-9D9E9FA0AAABACAEAFB0B1B2B3B4B5B6
E-B7B8B9BABBBCBEBFCACBCCCDCECFDADB
F-DCDDDEDFE1EAEBECEDEEEFFAFBFCFDFE
 EBCDICとしての仕様は、Latin-1対応のEBCDICとして一般的な、CP1047(Latin 1/Open Systems)に近い。
 ASCIIの記号類は、全てCP1047と同じ符号位置に配置されており互換性が高く、Latin-1のアクセント付きアルファベットの代わりにUnicode文字を追加したような状態となっている。

EBCDIC→I8
 UTF-EBCDICから復号する場合は、以下の表を用いてUTF-EBCDICからI8-sequenceを得る。
 -0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F
0-000102039C09867F978D8E0B0C0D0E0F
1-101112139D0A08871819928F1C1D1E1F
2-808182838485171B88898A8B8C050607
3-909116939495960498999A9B14159E1A
4-20A0A1A2A3A4A5A6A7A8A92E3C282B7C
5-26AAABACADAEAFB0B1B221242A293B5E
6-2D2FB3B4B5B6B7B8B9BABB2C255F3E3F
7-BCBDBEBFC0C1C2C3C4603A2340273D22
8-C5616263646566676869C6C7C8C9CACB
9-CC6A6B6C6D6E6F707172CDCECFD0D1D2
A-D37E737475767778797AD4D5D65BD7D8
B-D9DADBDCDDDEDFE0E1E2E3E4E55DE6E7
C-7B414243444546474849E8E9EAEBECED
D-7D4A4B4C4D4E4F505152EEEFF0F1F2F3
E-5CF4535455565758595AF5F6F7F8F9FA
F-30313233343536373839FBFCFDFEFF9F

I8の長さ
 再配列されているために、UTF-8と違って、各オクテットを見ただけでは続く符号長が簡単には分からない。
 そこで、次の表を参照して判断する。数字の意味は次の通り。
 -0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F
0-0000000000000000
1-0000000000000000
2-0000000000000000
3-0000000000000000
4-1999999999911111
5-1999999999111111
6-1199999999911111
7-9999222221111111
8-2111111111222222
9-2111111111222222
A-2111111111222122
B-2222222333333133
C-1111111111333333
D-1111111111334444
E-1411111111444555
F-1111111111566770

コード表
 ■は、2バイト以上のUTF-EBCDICの1バイト目を表わす。
 ▲は、2バイト以上のUTF-EBCDICの2バイト目以降を表わす。
 上位4ビット(4/0〜15/15)
4-5-6-7-8-9-A-B-C-D-E-F-
-0SP&-{}\0
-1/aj~AJ1
-2bksBKS2
-3cltCLT3
-4dmuDMU4
-5envENV5
-6fowFOW6
-7gpxGPX7
-8hqyHQY8
-9`irzIRZ9
-A!:
-B.$,#
-C<*%@
-D()_'[]
-E+;>=
-F|^?"APC
 ASCIIに含まれる文字は、全て1バイトの範囲内に含まれる。
 それ以外の文字を、空き領域を用いて符号化するが、UTF-8と同様、1バイト目と2バイト目以降で重複しないように工夫されている。

再検索