[diapublication, suivi vers fr.comp.lang.python]
Bonjour Doug,
Le 18/01/2024 09:23, Doug713705 a écrit :
>
> Je suis en train de coder un petite app en Python dont l'objectif et de
> traiter des mails de diverses provenances dont Usenet.
>
> Ça fait maintenant quelques années que je me suis éloigné d'Usenet et
> j'ai complètement oublié tout ce que je pouvais savoir sur les
> subtilités et pièges qui se cachent derrière les notions de charset,
> d'encodage et de type MIME.
>
> En clair, je lutte pour décoder de manière fiable les articles en
> provenance d'Usenet lorsque le corps d'un article est encodé en utf-8 et
> publié en Quoted-Printable. Ça devient le bazar avec des "=" en fin de
> ligne qui se mélangent avec ceux des caractères encodés en UTF-8.
C'est défini dans le RFC 2045 :
<
https://datatracker.ietf.org/doc/html/rfc2045#section-6.7>
En gros il y a deux situations possibles pour le caractère = :
- soit il est suivi de deux chiffres hexa (0 à 9 ou A à F, mais je te
recommande d'accepter aussi les minuscules a à f) ;
- soit il est suivi de CRLF (avec éventuellement des espaces ou tabulations
qui pourraient avoir été ajoutées entre = et CRLF et qu'il faut ignorer).
Aussi, à moins d'être sûr qu'on ne t'envoie que de l'UTF-8 et que du
quoted-printable, il pourrait être sage de traiter aussi le cas des autres
charsets et celui du base64.
> Autre interrogation, je suppose que les entêtes (headers) d'un article
> sont systématiquement en iso-8859-1 sauf le sujet qui peut être en UTF-8
> Quoted-Printable. J'ai bon ?
Ah non, certainement pas. Les différentes normes de l'IETF évoluent de plus
en plus pour accepter l'UTF-8 là où avant il n'y avait que de l'US-ASCII,
mais l'ISO-8859-1 brut n'a jamais été accepté en standard dans des entêtes
de courriel ou de news (même si au début de usenet-fr c'était toléré à
défaut de meilleure solution). La meilleure solution n'est arrivée qu'en
1996 (après des balbutiements en 1993) sous la forme du RFC 2047 :
<
https://datatracker.ietf.org/doc/html/rfc2047>.
> Vous l'aurez compris, j'ai besoin qu'on me raffraichisse la mémoire sur
> comment décoder tout ce fatras. Un lien vers une documentation, voire
> des exemples, seraient bienvenus.
Puisque c'est en python, inutile de réinventer la roue. Utilise les packages
standards qui font tout ça très bien :
<
https://docs.python.org/3/library/email.html>
[suivi fr.comp.lang.python]
--
Olivier Miakinen