ILE-RPGでは組込み関数%UCS2を使うとEBCDICの文字ストリングを
UCS2つまりUTF-16に変換することができる。
つまりEBDCICからUnicodeへの変換である。
例えば次のような具合である。
0025.01 D UCS2 S 512C CCSID(1200) : 0051.01 /FREE 0051.02 UCS2 = %UCS2(XML); 0051.03 /END-FREE
IBMはUnicodeと言えばUTF-16(CCSID:1200)が標準であり
一般的であると思っていたようである。
しかし現実はそうではなくUTF-8(CCSID: 1208 )が主流である。
インターネットのホーム・ページは大半がUTF-8 で
作成されておりUTF-16のコンテンツなどは見たことがない。
MSNやGoogle, YahooもみなUTF-8で作成されている。
これはUTF-16もUTF-8も漢字はほぼ3バイトであるが
UTF-16の場合の半角英数字は2バイトであるのに対して
UTF-8の場合の半角英数字は1バイトであり
ASCIIコードと同じである。
つまり扱いやすいし容量も少なくて済む。
ということでUnicodeの現状はUTF-8が占めている。
Ajaxなどに使用されるのもUTF-8であるし
LINEの通信に利用されているのもUTF-8である。
IBMもようやく周りからの意見などによって
UTF-16よりもUTF-8のほうが必要であることに
気がついてUTF-8への対応をi5/OS Ver7.2から開始した。
私たちはIBMがUnicode対応を打ち出した当初から
IBMは遅れていると気が付いていて%UCS2は
使い物にはならないと感じていたが
IBMもようやく %UCS2を次のように拡張した。
0025.01 D UCS8 S 512C CCSID(1208) : 0051.01 /FREE 0051.02 UCS8 = %UCS2(XML:1208); 0051.03 /END-FREE
これによってCCSIDを追加で指定することによって
EBCDICをUTF-8に変換することが可能になった。
CCSID 1399はUnicodeではありません
都市伝説のように特約店のSEなどでCCSIDをUnicode 1399に変えましょうと
言ったりするSEがいるがこれは全くの間違い。
PCOMMなどのエミュレータで 1399(Unicode)と書かれていることが
原因であると思うが1399はあくまでもEBCDICである。
Unicodeの場合はUTF-8であっても漢字は3バイトである。
CCSIDを1399に変更してもEBCDICの漢字は3バイトにはならない。
個人サイトでいまだにCCSID1399はUnicodeですと書かれているサイトも
あるが全くの誤りである。