Comment convertir les entités HTML en Unicode et vice versa en Python ?
Réponses
Trop de publicités?$ 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
Si quelqu'un comme moi se demande pourquoi certains numéros (codes) d'entités comme ™ (for trademark symbol), € (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
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 = ' '
try:
f.write(dat.encode('ascii'))
except:
f.write(html.escape(dat).encode('ascii', 'xmlcharrefreplace'))
j'espère que cela sera utile à quelqu'un
- Réponses précédentes
- Plus de réponses
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/
6 votes
+1 Il contribue à l'ensemble des données.
2 votes
Cette question a une portée plus large que celle indiquée par le lien "duplicate" : cette question porte également sur le "vice versa", c'est-à-dire sur le passage des entités Unicode aux entités HTML.