IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Encoder les carctères spéciaux en HTML Entity


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 138
    Par défaut Encoder les carctères spéciaux en HTML Entity
    Bonjour,

    existe t-il en Python une fonction permettant de remplacer dans une chaine de caractères tous les caractères spéciaux du style 'à' par leurs équivalents 'à'

    Et petite question subsidiaire :

    Comment utiliser u'' sur une variable.
    En effet, on peut facilement faire u'ça va ???' mais si j'aiune variable data par exemple, comment faire pour appliquer u sur ma variable, sachant que si je fais u'data', ça transformera la chaine de caractères data et non ma variable...

    Merci d'avance pour vos réponses.
    Tchuss, @+, jinpol...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 12
    Par défaut
    Pour la manipulation de chaine de caractere, je ne suis pas sûr de comprendre ce que tu cherche, mais dans le doute:

    name = "joseph"
    coucou = "salut %s" %(name)

    C'est bien ça?

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne sais pas s'il existe une fonction toute faite dans l'un des modules, mais tu peux au moins t'inspirer de ça:

    http://code.activestate.com/recipes/...-special-char/

    Pour ta 2ème question, il suffit d'utiliser l'une des fonctions de conversion en unicode. Par exemple, si la chaine à convertir est en utf-8: data = data.decode('utf-8') ou data = unicode(data, 'utf-8').

    Dans tous les cas, il faut donner l'encodage de la chaine à convertir. Quand on utilise u"xxx", python prend pour encodage de la chaine celui de la page de code (que l'on peut définir avec la ligne de coding).

    Tyrtamos

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 138
    Par défaut
    Merci pour vos réponses.

    J'avais déjà fait une fonction de ce genre, mais je cherchai plus simple...et j'ai pas trouvé.

    Au moins j'aurai qd même appris qqchose.

    Tchuss, @+, jinpol...

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    DERNIERE MISE A JOUR : JEUDI 3 JUIN A 20h40

    Voici un début de méthode via Python 3 à compléter pour travailler avec du texte encodé en UTF-8.

    Le script à utiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #! /usr/bin/env python
     
    # The following dictionnary was built by the script  tools_build_variables.
    SPECIAL_CHARACTERS = {'€': '&euro;', '£': '&pound;', '§': '&sect;', '«': '&laquo;', '¯': '&masr;', '³': '&sup3;', '·': '&middot;', '»': '&raquo;', '<': '&lt;', '¿': '&iquest;', 'Ã': '&Atilde;', 'Ç': '&Ccedil;', 'Ë': '&Euml;', 'Ï': '&Iuml;', 'Ó': '&Oacute;', '×': '&times;', 'Û': '&Ucirc;', 'ß': '&szlig;', 'ã': '&atilde;', 'ç': '&ccedil;', 'ë': '&euml;', 'ï': '&iuml;', 'ó': '&oacute;', '÷': '&divide;', 'û': '&ucirc;', 'ÿ': '&yuml;', '¤': '&curren;', '¨': '&uml;', '¬': '&not;', '°': '&deg;', '´': '&acute;', '¸': '&cedil;', '¼': '&frac14;', 'À': '&Agrave;', 'Ä': '&Auml;', 'È': '&Egrave;', 'Ì': '&Igrave;', 'Ð': '&Eth;', 'Ô': '&Ocirc;', 'Ø': '&oslash;', 'Ü': '&Uuml;', 'à': '&agrave;', 'ä': '&auml;', 'è': '&egrave;', 'ì': '&igrave;', 'ô': '&ocirc;', 'ü': '&uuml;', '¡': '&iexcl;', '"': '&quot;', '&': '&amp;', '©': '&copy;', '±': '&plusmn;', 'µ': '&micro;', '¹': '&sup1;', '½': '&frac12;', '>': '&gt;', 'Á': '&Aacute;', 'Å': '&Aring;', 'É': '&Eacute;', 'Í': '&Iacute;', 'Ñ': '&Ntilde;', 'Õ': '&Otilde;', 'Ù': '&Ugrave;', 'Ý': '&Yacute;', 'á': '&aacute;', 'å': '&aring;', 'é': '&eacute;', 'í': '&iacute;', 'ñ': '&ntilde;', 'õ': '&otilde;', 'ù': '&ugrave;', 'Ÿ': '&Yuml;', 'ý': '&yacute;', '¢': '&cent;', '¦': '&brvbar;', 'ª': '&ordf;', '®': '&reg;', '²': '&sup2;', '¶': '&para;', 'º': '&ordm;', '¾': '&frac34;', 'Â': '&Acirc;', 'Æ': '&Aelig', 'Ê': '&Ecirc;', 'Î': '&Icirc;', 'œ': '&oelig;', 'Ò': '&Ograve;', 'Ö': '&Ouml;', 'Ú': '&Uacute;', 'Þ': '&thorn;', 'â': '&acirc;', 'æ': '&aelig', 'ê': '&ecirc;', 'î': '&icirc;', 'ò': '&ograve;', 'ö': '&ouml;', 'ú': '&uacute;'}
     
    def htmlCoding(stringToClean):
        codedString = ''
     
        for oneChar in stringToClean:
            if oneChar in SPECIAL_CHARACTERS:
                codedString += SPECIAL_CHARACTERS[oneChar]
            else:
                codedString += oneChar
     
        return codedString
     
     
    if __name__ == '__main__':
        test = "Voilà une phrase accentuée qui vaut 1€."
     
        print(test)
        print(' '*4 + ' HTML ' + ' '*4)
        print(htmlCoding(test))
    Ceci renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Voilà une phrase accentuée qui vaut 1€.
         HTML     
    Voil&agrave; une phrase accentu&eacute;e qui vaut 1&euro;.
    Le script tools_build_variables.py à compléter : il me semble qu'il manque des caractères mathématiques, mais pour les lettres ceci devrait être bon (au passage toute collaboration est la bienvenue).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    #! /usr/bin/env python
     
    import copy
     
    # Source for the list of special characters
     
    # THE UPPER CASE LETTERS
    SPECIAL_CHARACTERS_UPPER = {
    # A
        'À': "&Agrave;",
        'Á': "&Aacute;",
        'Â': "&Acirc;",
        'Ã': "&Atilde;",
        'Ä': "&Auml;",
        'Å': "&Aring;",
        'Æ': "&Aelig",
    # C
        'Ç': "&Ccedil;",
    # E
        'È': "&Egrave;",
        'É': "&Eacute;",
        'Ê': "&Ecirc;",
        'Ë': "&Euml;",
    # I
        'Ì': "&Igrave;",
        'Í': "&Iacute;",
        'Î': "&Icirc;",
        'Ï': "&Iuml;",
    # N
        'Ñ': "&Ntilde;",
    # O
        'Ò': "&Ograve;",
        'Ó': "&Oacute;",
        'Ô': "&Ocirc;",
        'Õ': "&Otilde;",
        'Ö': "&Ouml;",
    # U
        'Ù': "&Ugrave;",
        'Ú': "&Uacute;",
        'Û': "&Ucirc;",
        'Ü': "&Uuml;",
    # Y
        'Ý': "&Yacute;",
        'Ÿ': "&Yuml;",
     
                         }
     
    # THE LOWER AND UPPER CASE LETTERS
     
    # We must make a new copy via copy.deepcopy .
    SPECIAL_CHARACTERS = copy.deepcopy(SPECIAL_CHARACTERS_UPPER)
     
    for oneChar in SPECIAL_CHARACTERS_UPPER:
        SPECIAL_CHARACTERS[oneChar.lower()] = SPECIAL_CHARACTERS_UPPER[oneChar].lower()
     
    # VERY SPECIAL
    VERY_SPECIAL_CHARACTERS = {
    # LETTERS
        'œ': "&oelig;",
        'Ð': "&Eth;",
        'Þ': "&thorn;",
        'ß': "&szlig;",
    # MATH.
        '<': "&lt;",
        '>': "&gt;",
        '÷': "&divide;",
        '×': "&times;",
        '±': "&plusmn;",
        'º': "&ordm;",
        '¹': "&sup1;",
        '²': "&sup2;",
        '³': "&sup3;",
        '¼': "&frac14;",
        '½': "&frac12;",
        '¾': "&frac34;",
        'Ø': "&oslash;",
        '¬': "&not;",
        '°': "&deg;",
    # PONCTUATIONS
        '"': "&" + "quot;", # Pb de mise ne forme du forum...
        '«': "&laquo;",
        '»': "&raquo;",
        '&': "&amp;",
        '¡': "&iexcl;",
        '¿': "&iquest;",
        '´': "&acute;",
        '·': "&middot;",
        '¸': "&cedil;",
        '§': "&sect;",
        '¶': "&para;",
    # MONEY
        '€': "&euro;",
        '£': "&pound;",
        '¢': "&cent;",
    # OTHERS
        '¤': "&curren;",
        '¦': "&brvbar;",
        '¨': "&uml;",
        '©': "&copy;",
        'ª': "&ordf;",
        '®': "&reg;",
        '¯': "&masr;",
        'µ': "&micro;",
                              }
     
    for oneChar in VERY_SPECIAL_CHARACTERS:
        SPECIAL_CHARACTERS[oneChar] = VERY_SPECIAL_CHARACTERS[oneChar]
     
    print('''# The following dictionnary was built by the script  tools_build_variables.
    SPECIAL_CHARACTERS = ''' + str(SPECIAL_CHARACTERS))

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Je crois qu'il y a plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> from htmlentitydefs import codepoint2name as entities
    >>> s = "étagère".decode('utf-8')    # ou l'encoding qui va bien
    >>> print u''.join('&%s;' % entities[ord(c)] if ord(c) in entities else c for c in s)
    &eacute;tag&egrave;re

  7. #7
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Merci pour ceci même si je suis grave "énervé" car j'ai posé plein de fois la question ici à ce sujet. Il vaut mieux tard que jamais...

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    La solution de dividee est parfaite.

    - elle évite d’écrire la création de SPECIAL_CHARACTERS à la main.

    - elle est plus complète: codepoint2name référence 252 caractères qui ont une représentation HTML spéciale, alors que ton code en compte 99.

    - dans ta fonction, un nouvel objet codedString est créé à chaque codedString += quelquechose
    L’utilisation d’un générateur rend la transformation plus coulante.
    Le code de dividee tourne en 25 % de temps en moins

    NB: le code de dividee est en Python 2.x



    ----------------------------------------



    rambc, tu écris:

    Voici un début de méthode via Python 3 à compléter pour travailler avec du texte encodé en UTF-8.
    En Python 3, les clés et valeurs de ton dictionnaire,
    'Á'
    '&Aacute;'
    'À'
    '&Agrave;'
    'Ã': '&Atilde;'
    'Â'
    '&Acirc;'
    etc.
    sont des chaÎnes Unicode, c’est à dire que leurs représentations binaires en machine sont des séquences de codes-point Unicode.


    Pour Python 3 aussi bien que pour Python 2 d'ailleurs, chaque code-point est un entier dont la représentation binaire en machine est faite:

    - soit selon une option par défaut -> sur des codets (unités de codage) de 16 bits (seizet): il s’agit alors d’un codage selon la norme UCS2 ( UCS2 n’est pas équivalente à UTF-16 )

    - soit si spécifiée explicitement -> sur des codets de 32 bits : il s’agit alors d’un codage selon la norme UCS4 ( par contre UCS4 = UTF-32 )

    L’option de configuration décidant UCS2 ou UCS4 s’établit à la compilation (démarrage).




    Selon ce que j’ai compris, UCS2 / UCS4 sont donc les deux seuls encodings utilisés pour la représentation interne des chaînes Unicode dans Python (2 et 3).
    Ceci étant, pourquoi précises-tu que ton dictionnaire permet de travailler avec du texte codé en UTF-8 ?

    Cela donne l’impression que tu sous-entends que les chaînes Unicode sont codées dans de l’UTF-8 ce qui n’est pas le cas puisque UTF-8 est un encoding bien distinct de UCS2 et UCS4.


    Ce n’est pas seulement avec de l’UTF-8 qu’Unicode permet de travailler, mais avec n’importe quel encoding: Unicode est le référentiel universel auqel on peut rapporter n’importe quel texte quel que soit son codage, moyennant des opérations d’encodage et décodage disponibles dans des codecs.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    j'ai posé plein de fois la question ici à ce sujet
    Jusqu’à hier, je ne comprenais rien à ces questions d’encodings. Je suis passé à Python 3 hier et n'ai creusé le sujet d’Unicode et des encodings que depuis hier.



    Je n’aimais pas trop la fonction print() à la place du statement print sans parenthèses. Mais j’ai découvert avec satisfaction la possibilité d’écrire tes trois lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        print(test)
        print(' '*4 + ' HTML ' + ' '*4)
        print(htmlCoding(test))
    en une seule expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        print(test,
              ' '*4 + ' HTML ' + ' '*4,
              htmlCoding(test),
              sep = '\n')
    ou si on préfère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(test, ' '*4 + ' HTML ' + ' '*4, htmlCoding(test),  sep = '\n')
    En Python 2, j'écrivais pour fair resortir les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        print test +\
              ' '*4 + ' HTML ' + ' '*4+\
              htmlCoding(test)


    Soit dit en passant, l’expression ' '*4 + ' HTML ' + ' '*4 me rend perplexe.
    À quoi sert le ’ ’*4 final ?
    Pourquoi ne pas écrire ’ HTML’ ?
    Ou à la limite ’HTML’.rjust(9) ?

  10. #10
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour eyquem,
    pour mon code, je l'ai fait très rapidement et effectivement il est incomplet et avec la bizarrerie que tu as notée, sûrement dû au fait que je voulais initialement afficher quelque chose comme '====HTML====' (mais au passage, c'est juste pour un test donc pas gênant).

    C'est bien parce que la méthode donnée par dividee est celle à utiliser, puisqu'elle est complète et native à Python, que je suis "énervé" , mais bon j'avais qu'à mieux chercher... Au moins j'aurais cette méthode dans mon projet.

    Pour finir, la gestion de texte en UTF-8 sous Python est TRES simple. C'est un bonheur, je le sais car mon projet servant à éditer des textes, les accents en français étaient un peu pénibles à gérer sous Python 2, alors que sous Python 3, je n'ai plus de souci (mais tout n'est pas rose non plus...).

  11. #11
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Voici la modification à faire sous Python 3 pour utiliser la solution de dividee :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #! /usr/bin/env python
     
    # WARNING ! Python 3
     
    # Source
    #    http://www.developpez.net/forums/d933074/autres-langages/python-zope/general-python/encoder-carcteres-speciaux-html-entity/#post5258518
     
    from html.entities import codepoint2name
     
    def htmlCoding(stringToCode):
        return ''.join( '&%s;' % codepoint2name[ord(oneChar)]
                        if ord(oneChar) in codepoint2name
                        else oneChar for oneChar in stringToCode )
     
     
    if __name__ == '__main__':
        test = "Voilà une phrase accentuée qui vaut « 1€ »."
     
        print( test,
               'HTML'.rjust(9),
               htmlCoding(test),
               sep = '\n' )

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    je suis "énervé" , mais bon j'avais qu'à mieux chercher...
    Je ne voudrais pas augmenter la morsure des coups de fouet, mais je pense que oui
    il m’est arrivé d’écrire qu’avec Python, il faut avoir pour principe de se dire souvent « quand on croit qu’il n’y en a plus, il y en a encore: il doit exister encore une possibilité de simplifier »
    Ce n’est pas pour rien que Python est qualifié de langage de très haut niveau (je préfère dire “du“ très haut niveau, sous-entendu: sur une échelle d’abstraction)






    Pour finir, la gestion de texte en UTF-8 sous Python est TRES simple. C'est un bonheur, je le sais car mon projet servant à éditer des textes, les accents en français étaient un peu pénibles à gérer sous Python 2, alors que sous Python 3, je n'ai plus de souci (mais tout n'est pas rose non plus...).

    Tu veux dire “ la gestion de texte en UTF-8 sous Python 3
    Mais ce n’est pas que pour les textes encodés en UTF-8 , c’est pour tous les encodings, non ? En fait je repose la même question.


    M’intéresse de savoir: c’était un peu pénible en Python 2 à cause de quoi ? À cause du fait qu’il fallait écrire u’grenadine’ pour spécifier une chaîne Unicode et utiliser plus souvent les fonctions encode() et decode() (je suppose..) ?


    Serait intéressant aussi de savoir qu’est ce qui affadit le rose dans Python 3.

  13. #13
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Je ne voudrais pas augmenter la morsure des coups de fouet, mais je pense que oui
    il m’est arrivé d’écrire qu’avec Python, il faut avoir pour principe de se dire souvent « quand on croit qu’il n’y en a plus, il y en a encore: il doit exister encore une possibilité de simplifier »
    Ce n’est pas pour rien que Python est qualifié de langage de très haut niveau (je préfère dire “du“ très haut niveau, sous-entendu: sur une échelle d’abstraction)
    Quelques kilomètres de vélo devraient me calmer...

    Citation Envoyé par eyquem Voir le message
    Tu veux dire “ la gestion de texte en UTF-8 sous Python 3
    Mais ce n’est pas que pour les textes encodés en UTF-8 , c’est pour tous les encodings, non ? En fait je repose la même question.
    Je ne sais pas quoi répondre. Ce que je sais c'est que je travaille avec de l'UTF-8 quoi que j'ai à faire : taper un fichier texte, un script Python, manipuler des fichiers texte depuis Python... Un changement d'OS m'a causé de gros soucis, et tout ceci juste à cause d'un problème d'encodage de scripts PhP du point de vue du "lanceur" PhP sous Mac, lesquels scripts étaient tout de même lisibles dans un éditeur de texte.

    Citation Envoyé par eyquem Voir le message
    M’intéresse de savoir: c’était un peu pénible en Python 2 à cause de quoi ? À cause du fait qu’il fallait écrire u’grenadine’ pour spécifier une chaîne Unicode et utiliser plus souvent les fonctions encode() et decode() (je suppose..) ?

    Serait intéressant aussi de savoir qu’est ce qui affadit le rose dans Python 3.
    Avec Python 3, je trouve plus simple la lecture-écriture de fichiers texte en UTF-8. Effectivement, il est plus simple de n'avoir qu'à taper 'grenadine' au lieu de u'grenadine'.
    Pour le rose pâle, je ne vais pas pouvoir te donner un exemple concret mais dans le cadre de mon projet, j'ai eu un souci à un moment car sous Python 2 je travaillais sur une chaîne de caractères qui ensuite a été vue comme une chaîne de BYTES, si je ne dis pas de bêtise, sous Python 3. Du coup, pour me déplacer d'un caractère comme 'é', j'ai dû changer provisoirement le déplacement en un décalage de len('é'), et non de 1. Je ne sais pas si mon choix de caractère est le bon mais c'est dans l'esprit du souci que j'ai eu.

    Sur ce, quelques kilomètres de VTT m'attendent.

  14. #14
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Désolé rambc, j'ai du rater ta question à ce sujet; je ne lis pas tous les posts du forum, et il y a des moments où je suis moins présent.

    Cela dit, je ne connaissais pas cette solution avant de m'y intéresser pour ce post. Un peu comme eyquem, je me suis dit que Python est "batteries included" et qu'il devait y avoir un moyen simple d'y arriver. En fait j'ai été quelque peu étonné qu'il n'y ait pas de fonction de conversion toute faite dans la librairie standard.

    Mais je ne comprends pas vraiment, de nos jours, pourquoi encore encoder les caractères accentués, par exemple, en entités html. Je comprends qu'il faille encoder les symboles qui poseraient un problème pour analyser la syntaxe html, comme >,<,&,", mais pourquoi les caractères accentués ? Le html n'est plus limité à l'ASCII, même si ça a peut-être été le cas à ses débuts. Il existe des entités html pour les lettres grecques, mais un site grec n'encodera pas tout son texte avec cela, il utilisera plutôt un encodage ISO-8859-7 ou de l'UTF-8. La balise <meta> permet bien de préciser un encodage. Pour ma part je me contenterais d'encoder <,>,&," et de préciser le bon charset dans la balise <meta>, je ne vois pas pourquoi se fatiguer avec le reste...

  15. #15
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par dividee Voir le message
    Désolé rambc, j'ai du rater ta question à ce sujet; je ne lis pas tous les posts du forum, et il y a des moments où je suis moins présent.
    Quand je disais être énervé, j'ai fait attention à ajouter des guillemets. De plus, je ne permettrais pas de faire des reproches. C'était du second degré...

    Citation Envoyé par dividee Voir le message
    Mais je ne comprends pas vraiment, de nos jours, pourquoi encore encoder les caractères accentués, par exemple, en entités html. Je comprends qu'il faille encoder les symboles qui poseraient un problème pour analyser la syntaxe html, comme >,<,&,", mais pourquoi les caractères accentués ? Le html n'est plus limité à l'ASCII, même si ça a peut-être été le cas à ses débuts. Il existe des entités html pour les lettres grecques, mais un site grec n'encodera pas tout son texte avec cela, il utilisera plutôt un encodage ISO-8859-7 ou de l'UTF-8. La balise <meta> permet bien de préciser un encodage. Pour ma part je me contenterais d'encoder <,>,&," et de préciser le bon charset dans la balise <meta>, je ne vois pas pourquoi se fatiguer avec le reste...
    Pour le coup, ce que tu dis est très, très juste. Comme quoi, je suis un peu à côté de la plaque en ce moment... Le vélo rendrait-il un peu con ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Web Service][SOAP] Encoder les caractéres spéciaux d'une méthode
    Par adil_vpb dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 18/05/2010, 16h56
  2. Réponses: 4
    Dernier message: 03/11/2009, 12h09
  3. Réponses: 0
    Dernier message: 28/12/2008, 22h44
  4. convertir les caractères spéciaux en html
    Par jultoys dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/07/2007, 18h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo