Nouveau script pour d=c3=a9coder les ent=c3=aates MIME
35 réponses
Olivier Miakinen
Bonjour,
J'ai fait une nouvelle version de mon script. Au lieu de prendre en
paramètre une ou plusieurs chaînes à décoder, il prend en paramètre
un ou plusieurs noms de fichiers contenant les entêtes complets.
On peut aussi lui faire lire les données sur stdin si on ne met pas
de paramètre, ou qu'on met « - » à la place d'un nom de fichier.
Par exemple, si on saisit :
decode_headers <<POTIRON
Message-ID: <c5a9-1@part.org>
From: Arvo =?UTF-8?Q?P=C3=A4rt?= <arvo@part.org>
To: =?Latin1?Q?Fr=E9d=E9ric_Chopin?= <fred@chopin.org>,
=?Latin2?Q?Anton=EDn_Dvo=F8=E1k?= <anton@dvorak.org>
References: <A65R-4d@chopin.org> <c5a7-3@part.org>
<A72Q-5a@chopin.org>
In-Reply-To: <A72Q-5a@chopin.org>
Subject: Re: Going to =?Shift-JIS?B?k4yLngo=?= (Tokyo) =?UTF-8?B?zpEK?=
=?UTF-8?B?zrjOrs69zrEK?= (Athens) and =?ISO-8859-5?Q?=BC=DE=E1=DA?=
=?ISO-8859-5?Q?=D2=D0?= (Moscow)
POTIRON
On obtiendra :
Message-ID: <c5a9-1@part.org>
From: Arvo Pärt <arvo@part.org>
To: Frédéric Chopin <fred@chopin.org>, Antonín Dvořák <anton@dvorak.org>
References: <A65R-4d@chopin.org> <c5a7-3@part.org> <A72Q-5a@chopin.org>
In-Reply-To: <A72Q-5a@chopin.org>
Subject: Re: Going to 東京 (Tokyo) Αθήνα (Athens) and Москва (Moscow)
(Note : le mot POTIRON n'a rien de spécial, c'est juste pour aider
OuiOui à améliorer son karma)
Voici le script. Attention, pour l'adapter au Mac il faudra modifier les
variables CUT, DECODE_QP, DECODE_B64, TR et ICONV définies vers le début
du fichier.
========================================================================
#!/bin/bash
####################################################################
# Name:
# decode_headers
#
# Description:
# Script used for decoding RFC 2047 MIME encoded headers.
#
# Example:
# decode_headers <<POTIRON
# Message-ID: <c5a9-1@part.org>
# From: Arvo =?UTF-8?Q?P=C3=A4rt?= <arvo@part.org>
# To: =?Latin1?Q?Fr=E9d=E9ric_Chopin?= <fred@chopin.org>,
# =?Latin2?Q?Anton=EDn_Dvo=F8=E1k?= <anton@dvorak.org>
# References: <A65R-4d@chopin.org> <c5a7-3@part.org>
# <A72Q-5a@chopin.org>
# In-Reply-To: <A72Q-5a@chopin.org>
# Subject: Re: Going to =?Shift-JIS?B?k4yLngo=?= (Tokyo) =?UTF-8?B?zpEK?=
# =?UTF-8?B?zrjOrs69zrEK?= (Athens) and =?ISO-8859-5?Q?=BC=DE=E1=DA?=
# =?ISO-8859-5?Q?=D2=D0?= (Moscow)
# POTIRON
# ->
# Message-ID: <c5a9-1@part.org>
# From: Arvo Pärt <arvo@part.org>
# To: Frédéric Chopin <fred@chopin.org>, Antonín Dvořák <anton@dvorak.org>
# References: <A65R-4d@chopin.org> <c5a7-3@part.org> <A72Q-5a@chopin.org>
# In-Reply-To: <A72Q-5a@chopin.org>
# Subject: Re: Going to 東京 (Tokyo) Αθήνα (Athens) and Москва (Moscow)
#
# Known bugs:
# Can't handle encoded-words which are not clearly separated
# from non-blank characters, e.g. in comments: (=?...?.?...?=)
####################################################################
#
# The following constants should be adapted for your system.
# For example, the executable base64 could be at /usr/local/bin instead
# of /usr/bin, and it could require parameter -D instead of -d.
#
CUT="/usr/bin/cut"
DECODE_QP="/usr/bin/qprint -d"
DECODE_B64="/usr/bin/base64 -d"
TR="/usr/bin/tr"
ICONV="/usr/bin/iconv"
#
# This script uses the following global variables
# VARY
# used when a function has to return a string and not only a number
# DECODED_LINE
# The current state of a header being currently decoded
# STATUS
# Has three possible values:
# - "none" at the beginning of a new header
# - "decoded-word" after a correctly decoded MIME part
# - "normal" after any other string
#
VARY=""
DECODED_LINE=""
STATUS="none"
#
# Function: usage
#
usage()
{
printf "Usage: %s [OPTION...] [FILE...]\n" $0
printf "Decode headers from given files for RFC 2047 MIME encodings.\n"
printf "\n"
printf "With no FILE, or when FILE is -, read standard input.\n"
printf "\n"
printf " -h, --help Give this help list\n"
exit 1
}
#
# Function: decode_word
#
# Description:
# Check that the parameter is an encoded word, then decode it and
# convert it to UTF-8.
#
# Parameter:
# A single (possibly MIME-encoded) word.
#
# Return value:
# If decoding is ok, set the result into VARY and return 0
# Otherwise return 1
#
decode_word()
{
word="$*"
###################################################################
# An encoded word contains only ASCII characters in range from
# '!' (Ascii value 0x21) to '~' (Ascii value 0x7e). This excludes
# in particular the SPACE (Ascii 0x20) and the TAB (Ascii 0x09).
#
# More specifically, it consists of five parts separated by
# question marks '?'
# 1. A character "="
# 2. The charset, e.g. "UTF-8" or "ISO-8859-1"
# 3. The encoding, B or Q in upper or lower case
# 4. The encoded text
# 5. A character "="
###################################################################
# Check that:
# - there is no character outside range from '!' to '~'
# - the 1st part is a "="
# - the 5th part is a "=" and it is the end of the string
if [ $(LANG=C expr "_$word" : '_=?[!-~]*=$') = 0 ]; then return 1; fi
end=$(printf "$word" | $CUT -f 5- -d '?')
if [ "$end" != "=" ]; then return 1; fi
#
# Function: add_word
#
# Description:
# Try to decode a new word, and update DECODED_LINE and STATUS
# depending on the result and the previous STATUS.
#
# Parameter:
# A single (possibly MIME-encoded) word.
#
# Return value:
# None
#
# Side effects:
# Change DECODED_LINE and STATUS
#
add_word()
{
word="$*"
if decode_word "$word"; then
if [ "$STATUS" = "normal" ]; then
DECODED_LINE="${DECODED_LINE} "
fi
DECODED_LINE="${DECODED_LINE}${VARY}"
STATUS="decoded-word"
else
if [ "$STATUS" != "none" ]; then
DECODED_LINE="${DECODED_LINE} "
fi
DECODED_LINE="${DECODED_LINE}${word}"
STATUS="normal"
fi
}
#
# Function: flush_line
#
# Description:
# Before beginning to manage a new header, or just before ending
# the script, print the pending DECODED_LINE if any.
#
# Parameter:
# None
#
# Return value:
# None
#
# Side effects:
# Print things to stdout
# Change DECODED_LINE and STATUS
#
flush_line()
{
if [ -n "${DECODED_LINE}" ]; then
printf "%s\n" "${DECODED_LINE}"
DECODED_LINE=""
STATUS="none"
fi
}
#
# Function: manage_line
#
# Description:
# Manage a new line, which can be either the beginning or the
# continuation of a mail/news header.
# This function prints the previous line if this is a new one,
# then it adds successive parts to the new DECODED_LINE, while
# updating STATUS as needed.
#
# Parameter:
# An input
line.========================================================================
#
# Return value:
# None
#
# Side effects:
# Print things to stdout
# Change DECODED_LINE and STATUS
#
manage_line()
{
line="$*"
# Is it a continuation line?
if [ $(LANG=C expr "$line" : "[ \t]") = 0 ]; then
# No: new header
flush_line
fi
for word in $line; do
add_word "$word"
done
}
#
# Function: manage_file
#
# Description:
# Call manage_line for each line in a given file
#
# Parameter:
# A file name, or "-" for stdin
#
# Return value:
# None
#
# Side effects:
# Same as manage_line
#
manage_file()
{
file=${1--} # POSIX-compliant; ${1:--} can be used either.
while IFS= read -r line; do
manage_line "$line"
done < <(cat -- "$file")
}
#
# Parse arguments for -h or --help
#
for i in "$@"; do
case $i in
-h | --help)
usage
;;
-)
;;
-*)
printf "Unknown argument '%s'\n" "$i"
usage
;;
esac
done
#
# Main loop.
# Call manage_file for each filename in parameters,
# then print the last pending DECODED_LINE if any.
#
for file in "$@"; do
manage_file "$file"
done
flush_line
Olivier Miakinen a suggéré en date du 18 octobre 2019 :
Que donnent les commandes suivantes ? MV$ uname MV$ uname -s D'après le nain Ternet, ça devrait être « Darwin » dans les deux cas.
Le nain n'a pas tort ! Il a même entièrement raison. -- Michel VAUQUOIS - http://michelvauquois.fr
quark67
Korben Dallas wrote:
Le 18/10/2019 à 12:22:59, M.V. a écrit :
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-) Voici le script que j'utilise (les 2 "fonctions" replace et decode sont définies en fin de script et les lignes précédées de -- sont des lignes de commentaires) : ==================================================== ====================================================================== > >
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui pleure tout les matins pour le sujet évoqué dans cette vidéo : https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste personne a subi le même sort), il ne verra pas votre suggestion.
Le 18/10/2019 à 12:22:59, M.V. a écrit :
> C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
>
>> Ouf, ça n'a pas l'air simple !
>
> Je crois qu'on est au moins deux à pouffer ! ;-)
>
> Voici le script que j'utilise (les 2 "fonctions" replace et decode sont
> définies en fin de script et les lignes précédées de -- sont des lignes
> de commentaires) :
> ====================================================
> ====================================================================== > >
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation
je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui
pleure tout les matins pour le sujet évoqué dans cette vidéo :
https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste
personne a subi le même sort), il ne verra pas votre suggestion.
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-) Voici le script que j'utilise (les 2 "fonctions" replace et decode sont définies en fin de script et les lignes précédées de -- sont des lignes de commentaires) : ==================================================== ====================================================================== > >
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui pleure tout les matins pour le sujet évoqué dans cette vidéo : https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste personne a subi le même sort), il ne verra pas votre suggestion.
Korben Dallas
Le 18/10/2019 à 18:50:34, quark67 a écrit :
Korben Dallas wrote:
Le 18/10/2019 à 12:22:59, M.V. a écrit :
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-) Voici le script que j'utilise (les 2 "fonctions" replace et decode sont définies en fin de script et les lignes précédées de -- sont des lignes de commentaires) : ==================================================== > ====================================================================== >>>
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui pleure tout les matins pour le sujet évoqué dans cette vidéo : https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste personne a subi le même sort), il ne verra pas votre suggestion.
il ne veux plus me lire car il a peur de perdre ça foi athéiste avec ma raison et met preuves... -- / Croire c'est le contraire de savoir, -- o -- si j'y crois, je ne sais pas, / si je sais, pas la peine d'y croire. --> Je Croix Pas, car Je Sais que c'est Faux MalgRê TouT...
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-)
Voici le script que j'utilise (les 2 "fonctions" replace et decode sont
définies en fin de script et les lignes précédées de -- sont des lignes
de commentaires) :
==================================================== >
====================================================================== >>>
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation
je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui
pleure tout les matins pour le sujet évoqué dans cette vidéo :
https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste
personne a subi le même sort), il ne verra pas votre suggestion.
il ne veux plus me lire car il a peur de perdre ça foi athéiste avec ma
raison et met preuves...
--
/ Croire c'est le contraire de savoir,
-- o -- si j'y crois, je ne sais pas,
/ si je sais, pas la peine d'y croire.
--> Je Croix Pas, car Je Sais que c'est Faux MalgRê TouT...
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-) Voici le script que j'utilise (les 2 "fonctions" replace et decode sont définies en fin de script et les lignes précédées de -- sont des lignes de commentaires) : ==================================================== > ====================================================================== >>>
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui pleure tout les matins pour le sujet évoqué dans cette vidéo : https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste personne a subi le même sort), il ne verra pas votre suggestion.
il ne veux plus me lire car il a peur de perdre ça foi athéiste avec ma raison et met preuves... -- / Croire c'est le contraire de savoir, -- o -- si j'y crois, je ne sais pas, / si je sais, pas la peine d'y croire. --> Je Croix Pas, car Je Sais que c'est Faux MalgRê TouT...
Korben Dallas
Le 18/10/2019 à 18:50:34, quark67 a écrit :
Korben Dallas wrote:
Le 18/10/2019 à 12:22:59, M.V. a écrit :
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-) Voici le script que j'utilise (les 2 "fonctions" replace et decode sont définies en fin de script et les lignes précédées de -- sont des lignes de commentaires) : ==================================================== > ====================================================================== >>>
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui pleure tout les matins pour le sujet évoqué dans cette vidéo : https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste personne a subi le même sort), il ne verra pas votre suggestion.
je suis allez voir après coup ta vidéo, alors c'est péché quand on ce moque des juifs mais pas des arabes ? comme ce charlie hebdo qui avait publier une photo du prophète du coran le cher Momohammed avec une étoile juif dans le cul... et ils sont des millions à dire "je suis charlie" l'or de l'attentat, c'était un média publique qui diffusait de la haines en faisant passer ça pour de l'humour... les arabes sur ce coup là, ils pensent avoir gagné une guerre ou une bataille... faut comprendre leur position dans ce monde occidental qui exploite la liberté d'expression mais qui parfois ça va trop loin... -- / Croire c'est le contraire de savoir, -- o -- si j'y crois, je ne sais pas, / si je sais, pas la peine d'y croire. --> Je Croix Pas, car Je Sais que c'est Faux MalgRê TouT...
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-)
Voici le script que j'utilise (les 2 "fonctions" replace et decode sont
définies en fin de script et les lignes précédées de -- sont des lignes
de commentaires) :
==================================================== >
====================================================================== >>>
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation
je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui
pleure tout les matins pour le sujet évoqué dans cette vidéo :
https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste
personne a subi le même sort), il ne verra pas votre suggestion.
je suis allez voir après coup ta vidéo, alors c'est péché quand on ce
moque des juifs mais pas des arabes ? comme ce charlie hebdo qui avait
publier une photo du prophète du coran le cher Momohammed avec une
étoile juif dans le cul... et ils sont des millions à dire "je suis
charlie" l'or de l'attentat, c'était un média publique qui diffusait de
la haines en faisant passer ça pour de l'humour... les arabes sur ce
coup là, ils pensent avoir gagné une guerre ou une bataille... faut
comprendre leur position dans ce monde occidental qui exploite la
liberté d'expression mais qui parfois ça va trop loin...
--
/ Croire c'est le contraire de savoir,
-- o -- si j'y crois, je ne sais pas,
/ si je sais, pas la peine d'y croire.
--> Je Croix Pas, car Je Sais que c'est Faux MalgRê TouT...
C'est le 17 octobre 2019 que le dénommé Olivier Miakinen a écrit ces
lignes :
Ouf, ça n'a pas l'air simple !
Je crois qu'on est au moins deux à pouffer ! ;-) Voici le script que j'utilise (les 2 "fonctions" replace et decode sont définies en fin de script et les lignes précédées de -- sont des lignes de commentaires) : ==================================================== > ====================================================================== >>>
cette conversation aurait ça place dans : fr.comp.sys.mac.programmation je dis ça, c'est dommage de ne pas en faire profiter sur ce groupe...
Très bonne initiative de votre part ; hélas, le très sectaire M.V. (qui pleure tout les matins pour le sujet évoqué dans cette vidéo : https://www.youtube.com/watch?v=jashuNCeJZY) vous a bloqué (ma modeste personne a subi le même sort), il ne verra pas votre suggestion.
je suis allez voir après coup ta vidéo, alors c'est péché quand on ce moque des juifs mais pas des arabes ? comme ce charlie hebdo qui avait publier une photo du prophète du coran le cher Momohammed avec une étoile juif dans le cul... et ils sont des millions à dire "je suis charlie" l'or de l'attentat, c'était un média publique qui diffusait de la haines en faisant passer ça pour de l'humour... les arabes sur ce coup là, ils pensent avoir gagné une guerre ou une bataille... faut comprendre leur position dans ce monde occidental qui exploite la liberté d'expression mais qui parfois ça va trop loin... -- / Croire c'est le contraire de savoir, -- o -- si j'y crois, je ne sais pas, / si je sais, pas la peine d'y croire. --> Je Croix Pas, car Je Sais que c'est Faux MalgRê TouT...
Olivier Miakinen
Le 17/10/2019 16:05, M.V. m'a répondu :
Par curiosité, elle chante dans quelle région, et avec quel ensemble vocal ?
À Brive
C'est un peu loin de chez moi (le Val-de-Marne).
dans l'ensemble vocal des «Ateliers de la Tempête". Le chef de cet ensemble et de « La Tempête », S-P Bestion, est une pointure et a obtenu il y a quelques années un diapason d'or alors qu'il avait tout juste 25 ans. <https://compagnielatempete.com/a-propos>
D'un autre côté, ça donne très envie de venir voir et écouter ! -- Olivier Miakinen
Le 17/10/2019 16:05, M.V. m'a répondu :
Par curiosité, elle chante dans quelle région, et avec quel ensemble
vocal ?
À Brive
C'est un peu loin de chez moi (le Val-de-Marne).
dans l'ensemble vocal des «Ateliers de la Tempête".
Le chef de cet ensemble et de « La Tempête », S-P Bestion, est une
pointure et a obtenu il y a quelques années un diapason d'or alors
qu'il avait tout juste 25 ans.
<https://compagnielatempete.com/a-propos>
D'un autre côté, ça donne très envie de venir voir et écouter !
Par curiosité, elle chante dans quelle région, et avec quel ensemble vocal ?
À Brive
C'est un peu loin de chez moi (le Val-de-Marne).
dans l'ensemble vocal des «Ateliers de la Tempête". Le chef de cet ensemble et de « La Tempête », S-P Bestion, est une pointure et a obtenu il y a quelques années un diapason d'or alors qu'il avait tout juste 25 ans. <https://compagnielatempete.com/a-propos>
D'un autre côté, ça donne très envie de venir voir et écouter ! -- Olivier Miakinen