2007/01/22 [月]
この符号方式は、他の UTF とは違い、UTF-5 の次のバージョンと言う意味であって、UTF の 6bit 版ではありません。IDN の符号化方式の一つので、本来なら別の名前をつけるべきものです。変換の基本的な考えは、各文字の上位バイト、もしくは上位ニブルの一致した部分を省略し、変形UTF-5 変換を行います。変形UTF-5 は、各文字の上位にある不要な 0 を無視して変換するという方法です。基本的にドメインのホスト名のような短い文字列を対象としています。
変換方法
- 可変長16進符号化(UTF5VAR): 文字の上位から連続するニブル(4bit)の値 0 を除去した値に対し UTF-5 の変換を行う。
例 0x1234→0x1234→S234 0x0123→0x123→H23 0x0001→0x1→H 0x0000->0x0→G - 次のように行う。
mask=0xffff if(文字 '-' を除いた文字数が 1 つ){ //なにもしない } else if(文字列中の'-'を除いた各文字の先頭バイトが V で一致している){ 出力("Y"+UTF5VAR(V)) //識別符号 'Y' と共通バイトを出力 mask=0x00ff } else if(文字列中の'-'を除いた各文字の先頭ニブルが V で一致している){ 出力("Z"+UTF5VAR(V)) //識別符号 'Z' と共通ニブルを出力 mask=0x0fff } foreach(文字列のそれぞれの文字 C){ 出力(UTF5VAR(C & mask)) }
変換例
-
ユニコード (0x30E6 0x30CB 0x30B3 0x30FC 0x30C9) →
mask=0xffff →
文字列中の先頭バイトが 0x30 で一致 →
V=0x30 → 出力("Y"+UTF5VAR(0x30)) mask=0x00ff →
出力(UTF5VAR(0x30E6 & 0x00ff))
出力(UTF5VAR(0x30CB & 0x00ff))
出力(UTF5VAR(0x30B3 & 0x00ff))
出力(UTF5VAR(0x30FC & 0x00ff))
出力(UTF5VAR(0x30C9 & 0x00ff)) → 結果 →
"Y"+UTF5VAR(0x30)+UTF5VAR(0xE6)+UTF5VAR(0xCB)+UTF5VAR(0xB3)+UTF5VAR(0xFC)+UTF5VAR(0xC9) →
Y J0 U6 SB R3 VC S9 →
YJ0U6SBR3VCS9
by seclan