OVH Cloud OVH Cloud

conversion de chaines de caractères accentuées

19 réponses
Avatar
Dan
Bonjour,

Je voulais savoir s'il existait une fonction permettant de transformer
des textes accentu=E9s en un texte non accentu=E9 (=E9 -> E, etc)

9 réponses

1 2
Avatar
olive
en UTF-8 tous les caractères sont codés sur 2 octets.


Merci HG, cela fonctionne.

Peux-tu m'expliquer quel était le problème avec la solution
précédente ?


Avatar
hg
olive wrote:
en UTF-8 tous les caractères sont codés sur 2 octets.


Merci HG, cela fonctionne.

Peux-tu m'expliquer quel était le problème avec la solution
précédente ?


Ben pourtant:



# -*- coding: utf-8 -*-
import string


print len('a') == len('à')

False




hg


Avatar
Dan
On 22 nov, 19:05, "olive" wrote:
en UTF-8 tous les caractères sont codés sur 2 octets.


so what ?

Manifestement pas le "a" alors !!

Et pourquoi si on met un espace entre les caractères ca passe alors ?!

Avatar
hg
Dan wrote:

On 22 nov, 19:05, "olive" wrote:
en UTF-8 tous les caractères sont codés sur 2 octets.


so what ?

Manifestement pas le "a" alors !!

Et pourquoi si on met un espace entre les caractères ca passe alors ?!



depuis la liste principale:
********************************************
hg wrote:

How would you handle the string.maketrans then ?


maketrans works on bytes, not characters. what makes you think that you
can use maketrans if you haven't gotten the slightest idea what's in the
string?

if you want to get rid of accents in a Unicode string, you can do the
approaches described here

http://www.peterbe.com/plog/unicode-to-ascii

or here

http://effbot.org/zone/unicode-convert.htm

which both works on any Unicode string.

</F>

********************************************

Effectivement:

# -*- coding: utf-8 -*-
import unicodedata
title = u"àbcdeéô"

print unicodedata.normalize('NFKD', title).encode('ascii','ignore')

retourne "abcdeeo"

hg


Avatar
Dan
Ok !
Et ca m'a permis de découvrir le forum en anglais.
C'est sympa d'avoir posé la question pour moi.
Avatar
MC
Bonsoir !

en UTF-8 tous les caractères sont codés sur 2 octets.


Non ! sur 2 octets, c'est utf-16.

En utf-8, les caractères sont codés avec 1 à 4 octets. Les 127 premiers
caractères étant codés sur 1 octet, de manière similaire à l'ascii
standard.

Autre caractéristique de l'utf-8 : il n'utilise pas 0x00, contrairement
aux autres utf.

--
@-salutations

Michel Claveau

Avatar
hg
Dan wrote:
Ok !
Et ca m'a permis de découvrir le forum en anglais.
C'est sympa d'avoir posé la question pour moi.



My pleasure

Avatar
olive
Cette méthode ne fonctionne pas pour tout les caractères (exemple :
oe entrelacés).

PS: désolé pour la réponse précipitée à propos de UTF-8 (c'est
bien sûr MC qui donne la bonne réponse à ce sujet).


Dan wrote:

On 22 nov, 19:05, "olive" wrote:
en UTF-8 tous les caractères sont codés sur 2 octets.


so what ?

Manifestement pas le "a" alors !!

Et pourquoi si on met un espace entre les caractères ca passe alors ?!



depuis la liste principale:
********************************************
hg wrote:

How would you handle the string.maketrans then ?


maketrans works on bytes, not characters. what makes you think that you
can use maketrans if you haven't gotten the slightest idea what's in the
string?

if you want to get rid of accents in a Unicode string, you can do the
approaches described here

http://www.peterbe.com/plog/unicode-to-ascii

or here

http://effbot.org/zone/unicode-convert.htm

which both works on any Unicode string.

</F>

********************************************

Effectivement:

# -*- coding: utf-8 -*-
import unicodedata
title = u"àbcdeéô"

print unicodedata.normalize('NFKD', title).encode('ascii','ignore')

retourne "abcdeeo"

hg




Avatar
olive
A priori la meilleure solution est là
http://effbot.org/zone/unicode-convert.htm
(code:
http://effbot.python-hosting.com/file/stuff/sandbox/text/unaccent.py)


Cette méthode ne fonctionne pas pour tout les caractères (exemple :
oe entrelacés).


1 2