2001/09/17 [月]
Internationalized Domain Name に対応するために、複数の ACE が考案されています。DUDE もその一つです。この方式の特徴は、直前にあらわれた文字コードとの差分だけを記録することにより、文字列を圧縮することにあります。比較的単純な方式です。
変換方法 (for UTF16)
U は UTF-16 入力文字列を U0 U1 ... Un とするとき、 a16[]="0123456789abcdef"; b16[]="ghijklmnopqrstuv"; PREV = 0; for(i = 0; i < n; i++) if(Ui =='-'){put('-');continue;} t = PREV ^ Ui ; for(j = 0; j < 16; j+=4){ if((t & (0xfff0 << j)) == 0){ put(b16[(Ui >> j)&0x0f]); for(j -= 4; j >= 0; j -= 4) put(a16[(Ui >> j)&0x0f]); PREV = Ui; break; } } }
- "dq--" を先頭につけます。(DNS の場合、大文字小文字を区別しないので Dq--, dQ-- などを受け付ける必要があります)
変換例
-
漢字 (0x226F 0x575B) → 変換 →
i26f l75b →
"dq--i26fl75b" (すなわちバイト列 64712d2d693236666c373562)
by seclan