87 votes

Convertir les entités HTML en Unicode et vice versa

Comment convertir les entités HTML en Unicode et vice versa en Python ?

17 votes

@Jarret Hardie : En fait, le show-and-tell est parfaitement bien sur SO. Dès la première entrée de la FAQ ( stackoverflow.com/faq ) "Il est également parfaitement acceptable de poser et de répondre à votre propre question de programmation". Cependant, il est également encouragé de rechercher les doublons.

13 votes

Je publie des questions auxquelles j'ai répondu moi-même dans le passé pour le bénéfice d'autres utilisateurs qui cherchent des réponses similaires.

0 votes

Peut également se faire sans bibliothèques externes. Voir stackoverflow.com/questions/663058/html-entity-codes-to-text/

9voto

Jan Kyu Peblik Points 518
$ python3 -c "
> import html
> print(
>     html.unescape('&©—')
> )"
&©—

$ python3 -c "
> import html
> print(
>     html.escape('&©—')
> )"
&©—

$ python2 -c "
> from HTMLParser import HTMLParser
> print(
>     HTMLParser().unescape('&©—')
> )"
&©—

$ python2 -c "
> import cgi
> print(
>     cgi.escape('&©—')
> )"
&©—

Le HTML ne requiert strictement que & (esperluette) et < (crochet d'angle gauche / signe inférieur à) à échapper. https://html.spec.whatwg.org/multipage/parsing.html#data-state

3voto

brucekaushik Points 67

Si quelqu'un comme moi se demande pourquoi certains numéros (codes) d'entités comme &#153; (for trademark symbol), &#128; (for euro symbol) ne sont pas encodés correctement, la raison étant que ces caractères ne sont pas définis dans la norme ISO-8859-1 (alias Windows-1252).

Notez également que le jeu de caractères par défaut de html5 est utf-8, alors qu'il était ISO-8859-1 pour html4.

Nous devrons donc contourner le problème d'une manière ou d'une autre (trouver et remplacer ces éléments dans un premier temps).

Référence (point de départ) de la documentation de Mozilla

https://developer.mozilla.org/en-US/docs/Web/Guide/Localizations_and_character_encodings

1voto

Stephen Ellwood Points 106

J'ai utilisé la fonction suivante pour convertir unicode rippé d'un fichier xls en un fichier html tout en conservant les caractères spéciaux trouvés dans le fichier xls :

def html_wr(f, dat):
    ''' write dat to file f as html
        . file is assumed to be opened in binary format
        . if dat is nul it is replaced with non breakable space
        . non-ascii characters are translated to xml       
    '''
    if not dat:
        dat = '&nbsp;'
    try:
        f.write(dat.encode('ascii'))
    except:
        f.write(html.escape(dat).encode('ascii', 'xmlcharrefreplace'))

j'espère que cela sera utile à quelqu'un

0voto

HappyFace Points 305
#!/usr/bin/env python3
import fileinput
import html

for line in fileinput.input():
    print(html.unescape(line.rstrip('\n')))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X