2009-07-28 7 views
5

Dites que j'ai la chaîne "blöt träbåt" qui a quelques a et o avec tréma et anneau ci-dessus. Je veux qu'il devienne "blot trabat" aussi simplement que possible. Je l'ai fait quelques recherches et trouvé la méthode suivante: (. \u0308 pour trémas)Quel est un bon moyen de remplacer les caractères internationaux par leurs homologues latins de base en utilisant Python?

import unicodedata 
unicode_string = unicodedata.normalize('NFKD', unicode(string)) 

Cela me donnera la chaîne en format unicode avec les caractères internationaux répartis en caractère lettre de base et en combinant maintenant pour obtenir ce retour à une chaîne ASCII je pourrais faire ascii_string = unicode_string.encode('ASCII', 'ignore') et il ignorera simplement les caractères de combinaison, résultant dans la chaîne "blot trabat".

La question ici est: est-il une meilleure façon de le faire? C'est comme un détour, et je pensais qu'il y avait peut-être quelque chose que je ne connaissais pas. Je pourrais bien sûr l'inclure dans une fonction d'aide, mais je préférerais vérifier si cela n'existe pas déjà en Python.

+0

"La chaîne ASCII" blöt träbåt "" est une contradiction. ASCII n'a pas de caractères accentués. Voulez-vous dire "La chaîne Unicode"? – MSalters

+0

Hé, c'est exactement la même chose que je fais en C# ... –

+0

Ouais je viens de réaliser que j'ai utilisé le mauvais terme. Il ne doit pas nécessairement être Unicode, cependant. Il peut être étendu ASCII (ce qui était ce que je voulais vraiment dire.) – Blixt

Répondre

7

Il serait préférable que vous créiez une table explicite, puis utilisiez la méthode unicode.translate. L'avantage serait que la translittération est plus précise, par ex. translittérer "ö" à "oe" et "ß" à "ss", comme cela devrait être fait en allemand. Il existe plusieurs paquets de translittération sur PyPI: translitcodec, Unidecode et trans.

+1

Vous avez raison, la translittération est préférable à la suppression des décorations des caractères. Si '' große '' devenait '' grose'', cela serait déroutant (pas que je pense que je vais avoir affaire à des mots allemands, mais quand même) ... – Blixt

+0

J'utilise * translitcodec * car il semble être le plus module structuré professionnellement. Par ailleurs, contrairement à * trans *, il remplace 'å' par' aa' et 'ä' par' ae', comme c'est le cas lors de la translittération. – Blixt

+0

@Blixt: désolé, je ne peux pas vous aider avec une recommandation d'un paquet spécifique - ceci pourrait être une question SO distincte. Cependant, il semble que vous ayez déjà fait une évaluation. –

Questions connexes