¿Cómo funciona unicodedata.normalize (form, unistr)?

En la documentación de la API, http://docs.python.org/2/library/unicodedata.html#unicodedata.normalize . Dice

Devuelve el formulario normal para la cadena Unicode unistr . Los valores válidos para la forma son ‘NFC’, ‘NFKC’, ‘NFD’ y ‘NFKD’.

La documentación es bastante vaga, ¿puede alguien explicar los valid values con algunos ejemplos?

Encuentro la documentación bastante clara, pero aquí hay algunos ejemplos de código:

 from unicodedata import normalize print '%r' % normalize('NFD', u'\u00C7') # decompose: convert Ç to "C + ̧" print '%r' % normalize('NFC', u'C\u0327') # compose: convert "C + ̧" to Ç 

Ambas formas ‘D’ (= descomponer) convierten un solo carácter combinado (como ä ) en dos caracteres ( a + dos puntos). Ambas formas ‘C’ (= componer) hacen lo contrario.

Las dos formas “K” se utilizan para convertir los caracteres agregados a Unicode por motivos de compatibilidad. Por ejemplo, para admitir software que no puede dibujar círculos alrededor de símbolos, hay un conjunto de “números en círculo”, como ① (número de Unicode 2460). Cuando le aplicamos la descomposición canónica (NFD), no hace nada:

 print '%r' % normalize('NFD', u'\u2460') # u'\u2460' 

Sin embargo, la descomposición de compatibilidad (NFKD) devolverá el correspondiente carácter “compatible”:

 print '%r' % normalize('NFKD', u'\u2460') # 1 

Ver http://en.wikipedia.org/wiki/Unicode_equivalence para más detalles.