Deutsch   English   Français   Italiano  
<uoatlo$bjt$1@cabale.usenet-fr.net>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!.POSTED!not-for-mail
From: Olivier Miakinen <om+news@miakinen.net>
Newsgroups: fr.comp.usenet.lecteurs-de-news,fr.comp.lang.python
Subject: Re: Encodage, charset et type MIME
Followup-To: fr.comp.lang.python
Date: Thu, 18 Jan 2024 11:14:15 +0100
Organization: There's no cabale
Lines: 56
Message-ID: <uoatlo$bjt$1@cabale.usenet-fr.net>
References: <slrnuqhnvu.nfk.doug.letough@arcadia.local.mcos.nc>
NNTP-Posting-Host: 200.89.28.93.rev.sfr.net
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: 8bit
X-Trace: cabale.usenet-fr.net 1705572856 11901 93.28.89.200 (18 Jan 2024 10:14:16 GMT)
X-Complaints-To: abuse@usenet-fr.net
NNTP-Posting-Date: Thu, 18 Jan 2024 10:14:16 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
 Firefox/52.0 SeaMonkey/2.49.4
In-Reply-To: <slrnuqhnvu.nfk.doug.letough@arcadia.local.mcos.nc>
Bytes: 3519

[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