snippets / Remplace les caractères accentués par leurs équivalents

Language: Python - First posted by manatlan on 2007-10-3 18:33 (1 year, 1 month)
Link to the snippet: http://www.friendsnippets.org/snippet/35/

Exemple d'utilisation Accents.clean("mämé") == "mame"

 1 class Accents:
2 __reptable = {}
3
4 __corresp = [
5 (u"A", [0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x0100,0x0102,0x0104]),
6 (u"AE", [0x00C6]),
7 (u"a", [0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x0101,0x0103,0x0105]),
8 (u"ae", [0x00E6]),
9 (u"C", [0x00C7,0x0106,0x0108,0x010A,0x010C]),
10 (u"c", [0x00E7,0x0107,0x0109,0x010B,0x010D]),
11 (u"D", [0x00D0,0x010E,0x0110]),
12 (u"d", [0x00F0,0x010F,0x0111]),
13 (u"E", [0x00C8,0x00C9,0x00CA,0x00CB,0x0112,0x0114,0x0116,0x0118,0x011A]),
14 (u"e", [0x00E8,0x00E9,0x00EA,0x00EB,0x0113,0x0115,0x0117,0x0119,0x011B]),
15 (u"G", [0x011C,0x011E,0x0120,0x0122]),
16 (u"g", [0x011D,0x011F,0x0121,0x0123]),
17 (u"H", [0x0124,0x0126]),
18 (u"h", [0x0125,0x0127]),
19 (u"I", [0x00CC,0x00CD,0x00CE,0x00CF,0x0128,0x012A,0x012C,0x012E,0x0130]),
20 (u"i", [0x00EC,0x00ED,0x00EE,0x00EF,0x0129,0x012B,0x012D,0x012F,0x0131]),
21 (u"IJ", [0x0132]),
22 (u"ij", [0x0133]),
23 (u"J", [0x0134]),
24 (u"j", [0x0135]),
25 (u"K", [0x0136]),
26 (u"k", [0x0137,0x0138]),
27 (u"L", [0x0139,0x013B,0x013D,0x013F,0x0141]),
28 (u"l", [0x013A,0x013C,0x013E,0x0140,0x0142]),
29 (u"N", [0x00D1,0x0143,0x0145,0x0147,0x014A]),
30 (u"n", [0x00F1,0x0144,0x0146,0x0148,0x0149,0x014B]),
31 (u"O", [0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D8,0x014C,0x014E,0x0150]),
32 (u"o", [0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F8,0x014D,0x014F,0x0151]),
33 (u"OE", [0x0152]),
34 (u"oe", [0x0153]),
35 (u"R", [0x0154,0x0156,0x0158]),
36 (u"r", [0x0155,0x0157,0x0159]),
37 (u"S", [0x015A,0x015C,0x015E,0x0160]),
38 (u"s", [0x015B,0x015D,0x015F,0x01610,0x017F]),
39 (u"T", [0x0162,0x0164,0x0166]),
40 (u"t", [0x0163,0x0165,0x0167]),
41 (u"U", [0x00D9,0x00DA,0x00DB,0x00DC,0x0168,0x016A,0x016C,0x016E,0x0170,0x172]),
42 (u"u", [0x00F9,0x00FA,0x00FB,0x00FC,0x0169,0x016B,0x016D,0x016F,0x0171]),
43 (u"W", [0x0174]),
44 (u"w", [0x0175]),
45 (u"Y", [0x00DD,0x0176,0x0178]),
46 (u"y", [0x00FD,0x00FF,0x0177]),
47 (u"Z", [0x0179,0x017B,0x017D]),
48 (u"z", [0x017A,0x017C,0x017E])
49 ]
50 for __repchar,__codes in __corresp :
51 for __code in __codes :
52 __reptable[__code] = __repchar
53
54 @staticmethod
55 def clean(s):
56 """ enleve les accents de 's' (unicode ou utf8), et renvoi de l'unicode
57 (marche pour maj et minuscules !!!)
58 """
59 if isinstance(s,str) :
60 s = unicode(s,"utf8","replace")
61 return s.translate(Accents.__reptable)
In order to post a comment, you should have a friendsnippet account. Please sign-in.

2 comments

  • October 4th 2007 at 11:45

    Voir aussi mon snippet qui fait la même chose ;-)

  • October 4th 2007 at 11:25
     1 # -*- coding: UTF-8 -*-
    2 # ***** BEGIN LICENSE BLOCK *****
    3 #
    4 # Copyright 2007, laurent.rahuel@gmail.com
    5 #
    6 # Licensed under the Apache License, Version 2.0 (the "License");
    7 # you may not use this file except in compliance with the License.
    8 # You may obtain a copy of the License at
    9 #
    10 # http://www.apache.org/licenses/LICENSE-2.0
    11 #
    12 # Unless required by applicable law or agreed to in writing, software
    13 # distributed under the License is distributed on an "AS IS" BASIS,
    14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    15 # See the License for the specific language governing permissions and
    16 # limitations under the License.
    17 #
    18 # ***** END LICENSE BLOCK *****
    19 import unicodedata
    20
    21 def clean_string(my_string, encoding = 'utf-8'):
    22 my_string = my_string.decode(encoding)
    23 strange_chars_dict = {u'Æ':u'AE', u'æ':u'ae', u'Œ':u'OE', u'œ':u'oe', u'ß':u'ss'}
    24 for strange_char in strange_chars_dict.keys():
    25 my_string = my_string.replace(strange_char, strange_chars_dict[strange_char])
    26 my_string = unicodedata.normalize('NFKD', my_string).encode('ascii','ignore').decode('ascii')
    27 return my_string.encode(encoding)
    28
    29
    30 print clean_string("aàeéèêiîïù")

    aaeeeeiiiu

Oct '07
  • Exemple d'utilisation Accents.clean("mämé") == "mame"

Nov '07
Mar '08
Sep '08
  • Replace strange charactes. Trocar caracteres estranhos por normais.