O Python possui unicodedata
module em sua biblioteca padrão, que permite traduzir representações Unicode através de unicodedata.normalize()
function:
import unicodedata
s1 = 'Spicy Jalape\u00f1o'
s2 = 'Spicy Jalapen\u0303o'
t1 = unicodedata.normalize('NFC', s1)
t2 = unicodedata.normalize('NFC', s2)
print(t1 == t2)
print(ascii(t1))
t3 = unicodedata.normalize('NFD', s1)
t4 = unicodedata.normalize('NFD', s2)
print(t3 == t4)
print(ascii(t3))
Correndo com o Python 3.x:
$ python3 test.py
True
'Spicy Jalape\xf1o'
True
'Spicy Jalapen\u0303o'
O Python não é adequado para o shell one liners, mas pode ser feito se você não quiser criar um script externo:
$ python3 -c $'import unicodedata\nprint(unicodedata.normalize("NFC", "ääääää"))'
ääääää
Para o Python 2.x, você precisa adicionar a linha de codificação ( # -*- coding: utf-8 -*-
) e marcar strings como Unicode com o caractere u:
$ python -c $'# -*- coding: utf-8 -*-\nimport unicodedata\nprint(unicodedata.normalize("NFC", u"ääääää"))'
ääääää