Problème d'accents sur génération fichier texte

D’après un script bash, je génère le résultat vers un fichier texte.

En console, le fichier texte ne présente pas d’anomalies en termes d’accents mais si je le place sur mon petit site “de-test-bidoulle-maison”, les accents ne sont pas pris en charge.

A quel moment intervenir??

Le script [code]#!/bin/bash
film=false
titre="“
while read
do
[[ ${REPLY} == picturezone ]] && film=true
[[ ${REPLY} == De\ <a* ]] && auteur=$(IFS=’<>’ infos=( ${REPLY} ); echo ${infos[2]})
[[ ${REPLY} == Avec\ <a* ]] && acteurs=”$(sed 's/<a[^<]>//g; s###g’ <<< “${REPLY#Avec }”)"
[[ ${REPLY} == Date\ de\ sortie ]] && dateSortie="${REPLY#
: }" || {
${film} && [[ ${REPLY} != <>* ]] && {
if [[ ! ${titre} ]]
then
titre="${REPLY}“
else
if [[ ! ${typeFilm} ]]
then
typeFilm=”${REPLY}"
else
cat <<EOF
Titre=${titre}
Type=${typeFilm}
Date Sortie=${dateSortie}
De=${auteur}
Avec=${acteurs}
Résumé=${REPLY}

EOF
film=false
titre="“
typeFilm=”"
fi
fi
}
}
done < <(wget -qO- http://www.allocine.fr/dvd/agenda/)
true[/code]

Le résultat : Titre=Objection Type=Drame Date Sortie=02/04/2012 De=Erik Lochen Avec=Espen Skjønberg, Per Theodor Haugen Résumé=Une équipe de film s'active sur un tournage. Le réalisateur est interviewé. Ce que son film raconte ? "Laissons le spectateur inventer l'intrigue". Sa ...

Le résultat problématique passe à travers Apache / navigateur ? Si c’est bien ça, c’est probablement juste un problème de headers dans Apache. Faudrait voir comment tu exploites le résultat précisément, mais avec une page PHP il suffirait de rajouter :

Je place ce fichier texte de façon simple, je le place dans un répertoire et je crée une entrée dans la page web via un simple DVD

Apparemment, c’est un peu plus compliqué que ça :mrgreen:

Donc, le php serait une solution??

C’est juste un problème de jeu de caractères.
Pour vérifier que c’est bien ça, une fois le fichier affiché dans Iceweasel tu peux faire un clic droit dans la page -> Informations sur la page -> onglet Général -> Encodage (qui sera sûrement en ISO-8859-1 alors qu’il devrait être en UTF-8).

Il y a d’autres solutions plus simples que de passer par du PHP juste pour afficher ton fichier. Apache a une directive pour forcer le jeu de caractères par défaut (AddDefaultCharset) que tu peux mettre soit dans la config globale, soit dans un .htaccess pour un répertoire donné (celui contenant tes fichiers texte).

La config globales c’est gênant et le htaccess c’est le mal. Tu fait déjà presque du CGI. Autant générer du HTML ça rajoute 10 lignes à ton script et ça marcheras pour n’importe quel serveur web.

[code]#!/bin/bash
film=false
titre=""
cat <<EOF

Agenda des sorties DVD EOF while read do [[ ${REPLY} == *picturezone* ]] && film=true [[ ${REPLY} == De\ \<a* ]] && auteur=$(IFS='<>' infos=( ${REPLY} ); echo ${infos[2]}) [[ ${REPLY} == Avec\ \* ]] && { if [[ ! ${titre} ]] then titre="${REPLY}" else if [[ ! ${typeFilm} ]] then typeFilm="${REPLY}" else cat <<EOF Titre=${titre}
Type=${typeFilm}
Date Sortie=${dateSortie}
De=${auteur}
Avec=${acteurs}
Résumé=${REPLY}

EOF film=false titre="" typeFilm="" fi fi } } done < <(wget -qO- http://www.allocine.fr/dvd/agenda/) echo '' true [/code]

Comme ça si tu veux un peu améliorer l’affichage (avoir un cadre par film par exemple) c’est facile.
Si tu as l’intention de reparser le bidule derrière c’est plus gênant (mais dans ce cas là ton parseur se fout de l’encodage et tu peux envoyer tel quel ton fichier).

Merci beaucoup pour cette solution, je la teste rapidement

Le htaccess est vraiment mauvais?? je m’en sers pour limiter l’accès à une partie du site

Nan. Mais ça crée une dépendance vers apache et j’aime bien les alternatives d’apache (nginx, light-httpd, chrokee, etc) qui n’utilisent pas d’htaccess pour des problèmes de performance il semble.

Le htaccess est très pratique et je ne pense pas que les alternatives à apache aient une bonne solution pour permettre à pleins d’utilisateurs de configurer leur virtual host en parallèle (ce qui est nécessaire dans les solutions d’hébergement mutualisées comme les pages perso de free).

Bref le htaccess n’est pas à proscrire mais personnellement j’essaie de ne pas les utiliser quand c’est possible.

PS : OMG ! J’ai commis une erreur dans le script ! Le fichier généré n’est pas très propre et pourtant je l’ai passé au validateur w3c !

J’ai omis de fermer la balise html.

Pour la peine voici une version que je trouve plus claire (j’aime bien les switch) :

[code]#!/bin/bash
film=false
titre=""
url='http://www.allocine.fr/dvd/agenda/'
cat <<EOF

Agenda des sorties DVD EOF while read do case "${REPLY}" in *picturezone*) film=true ;; De\ \<a*) auteur=$(IFS='<>' infos=( ${REPLY} ); echo ${infos[2]}) ;; Avec\ \* ]] then if [[ ! ${titre} ]] then titre="${REPLY}" elif [[ ! ${typeFilm} ]] then typeFilm="${REPLY}" else cat <<EOF Titre=${titre}
Type=${typeFilm}
Date Sortie=${dateSortie}
De=${auteur}
Avec=${acteurs}
Résumé=${REPLY}

EOF film=false titre="" typeFilm="" fi fi ;; esac done < <(wget -qO- "$url") echo '' true [/code]

Titre=Objection Type=Drame Date Sortie=02/04/2012 De=Erik Lochen Avec=Espen Skjønberg, Per Theodor Haugen Résumé=Une équipe de film s'active sur un tournage. Le réalisateur est interviewé. Ce que son film raconte ? "Laissons le spectateur inventer l'intrigue". Sa ...

C’est impeccable, merci!!

Hum, encore une chose : comment rediriger la sortie du script dans un fichier html??

Où faut il mettre la redirection “>” ??

Le but est de créer une tâche cron qui génère le fichier “dvd.html” dans le répertoire

oui

En fait, j’arrive bien a générer un fichier html à l’exécution du script en console ./allocine.sh > dvd.html

Mais je voudrais que la tâche cron génère ce fichier lors de son exécution programmée.

Comment intégrer cette commande? à l’intérieur du script? dans les paramètres de la tâche cron??

Je ne parviens toujours pas à générer un fichier “dvd.html” issue de ce script via une tâche cron

Peux t-on générer un fichier par une commande dans une tâche cron?

Une petite redirection de la sortie standard devrait le faire sans trop de retouche :

[code]#!/bin/bash
film=false
titre=""
url='http://www.allocine.fr/dvd/agenda/'
out=‘dvd.html’

exec 1<> “$out”

cat <<EOF

Agenda des sorties DVD EOF while read do case "${REPLY}" in *picturezone*) film=true ;; De\ \<a*) auteur=$(IFS='<>' infos=( ${REPLY} ); echo ${infos[2]}) ;; Avec\ \* ]] then if [[ ! ${titre} ]] then titre="${REPLY}" elif [[ ! ${typeFilm} ]] then typeFilm="${REPLY}" else cat <<EOF Titre=${titre}
Type=${typeFilm}
Date Sortie=${dateSortie}
De=${auteur}
Avec=${acteurs}
Résumé=${REPLY}

EOF film=false titre="" typeFilm="" fi fi ;; esac done < <(wget -qO- "$url") echo ''

exec 1>&-

true[/code]

C’est pafait 'Msieur :023

Aurais tu un tuto a conseiller sur les scripts bash??

Merci pour tout ça :wink:

Ton moteur de recherche favoris.

Sérieusement non j’ai rien de bien. C’est extrêmement éparse et je ne peux parler de ce genre de truc que parce que Totor m’a fait comprendre que le shell était plus puissant que je ne le soupçonnait. Maintenant quand j’ai besoin de quelque chose comme ça je cherche et je teste. Là en l’occurrence j’avais vu qu’il était possible de manipuler directement les descripteurs de fichiers en ksh dans un linux mag, j’avais déjà eu l’idée qu’on pouvait donc manipuler le numéro 1 qui représente la sortie standard. Une recherche les mots “bash filedescriptor” m’a amené à ça : forums.devshed.com/unix-help-35/ … 54812.html

J’ai testé vite fait et voila. Ce serait vraiment bien de faire une doc complète sur le scripting shell, mais je ne vois même pas comment organiser ça pour que ce soit simple de s’y retrouver.

Bonjour,

Pour la doc sur le shell POSIX : man dash && standard shell POSIX de l’opengroup

Pour la doc sur le shell BASH : man bash && manuel BASH de gnu