Punycode
w ( 0 ) = 1 {\displaystyle w(0)=1}
w ( j ) = w ( j − 1 ) × ( b a s e − t ( j − 1 ) ) {\displaystyle w(j)=w(j-1)\times ({\mathit {base}}-t(j-1))}
t ( j ) = b a s e × ( j + 1 ) − b i a s {\displaystyle t(j)={\mathit {base}}\times (j+1)-{\mathit {bias}}} (ただしt(j)は上式をtmin以下ならtmin、tmax以上ならtmaxとクランプしたものである。 bias は状態変数である。)
base = 36, tmin = 1, tmax = 26
2つ目の文字を挿入する際には、さらにエンコードされたコード番号を繋げていけばよいが、挿入のたびにbiasの値が調節され、各桁の閾値と重みが変わることに注意する必要がある。biasの値が変わらない範囲であれば、単純に追加するだけでよい。例えば、"bücher" に2つ目の非ASCII文字を挿入しようとすると、前述のとおりデコーダは前に戻れないため、最初の挿入結果は "büücher" で、コードは "bcher-kvaa" となる。次の挿入可能位置は "bücüher" で "bcher-kvab" となる。同様に、続きの "bücherü" は "bcher-kvae" となり、次に来るのは "ýbücher" で "bcher-kvaf" である。
ドメイン名として Punycode を使用する際は、ピリオド(.)で区切られたドメイン名の階層レベルごとにプレフィックスとして「xn--」を使用し、エンコードされた文字列を続ける。大文字と小文字は区別されない。