seclan のほえほえルーム

| |

DUDE への変換方法 (UTF16 対応版)

・
2001/09/17 []

 Internationalized Domain Name に対応するために、複数の ACE が考案されています。DUDE もその一つです。この方式の特徴は、直前にあらわれた文字コードとの差分だけを記録することにより、文字列を圧縮することにあります。比較的単純な方式です。

変換方法 (for UTF16)

  1. 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;
       }
      }
     }
  2. "dq--" を先頭につけます。(DNS の場合、大文字小文字を区別しないので Dq--, dQ-- などを受け付ける必要があります)

変換例

  • 漢字 (0x226F 0x575B) → 変換 → 
    i26f l75b → 
    "dq--i26fl75b" (すなわちバイト列 64712d2d693236666c373562)


by seclan

関連


| |

 

配信

4.61 msec