Markdown et caractères accentués

Bonjour,
Le paquet markdown fournit un script perl du même nom qui permet de transformer du texte
markdown (voir ici pour la syntaxe) en html ou xhtml.
Quand je regarde les sources du html obtenu, je m’aperçois que les caractères éèçàùêôîäëüïö et leur contrepartie majuscule ainsi que le ß ne sont pas transformés en html et apparaîssent tel quel.

Dans mon navigateur les caractères apparaîssent correctement, mais je suis sûr que chez quelqu’un avec un autre encodage, ça donnerait des hiéroglyphes.

J’ai essayé de modifier le script mais jusque maintenant aucun résultat.
Si quelqu’un l’a déjà fait où se sent capable de résoudre ça,
ça permettrait d’améliorer le paquet et aider les non-anglophones qui l’utilisent.

Rapidement, je vois que ce programme n’en fait pas usage:

apt-get install libhtml-parser-perl
man HTML::Entities

Je manque de temps malheureusement, mais j’essaierais de jeter un coup d’oeil, bien qu’avec HTML::Entities, tu devrais pouvoir t’en sortir seul (le module est assez similaire à PHP) :stuck_out_tongue:

Merci,
je regarderai ça.
Entre-temps, j’ai fait deux mini scripts pour traiter mes fichiers .md avant de les passer dans Markdown, un pour les caractères français et un pour les caractères allemands.

fr2html :#!/bin/sh $1 < `sed -i -e 's/à/\&agrave;/g' -e 's/â/\&acirc;/g' -e 's/À/\&Agrave;/g' -e 's/Â/\&Acirc;/g' -e 's/é/\&eacute;/g' -e 's/è/\&egrave;/g' -e 's/ê/\&ecirc;/g' -e 's/ë/\&euml;/g' -e 's/É/\&Eacute;/g' -e 's/È/\&Egrave;/g' -e 's/Ê/\&Ecirc;/g' -e 's/Ë/\&Euml;/g' -e 's/î/\&icirc;/g' -e 's/ï/\&iuml;/g' -e 's/Î/\&Icirc;/g' -e 's/Ï/\&Iuml;/g' -e 's/ô/\&ocirc;/g' -e 's/Ô/\&Ocirc;/g' -e 's/ù/\&ugrave;/g' -e 's/û/\&ucirc;/g' -e 's/Ù/\&Ugrave;/g' -e 's/Û/\&Ucirc;/g' -e 's/ç/\&ccedil;/g' -e 's/Ç/\&Ccedil;/g' $1`

de2html :#!/bin/sh $1 < `sed -i -e 's/ä/\&auml;/g' -e 's/Ä/\&Auml;/g' -e 's/ö/\&ouml;/g' -e 's/Ö/\&Ouml;/g' -e 's/ü/\&uuml;/g' -e 's/Ü/\&Uuml;/g' -e 's/ß/\&szlig;/g' $1`

Ça résout déjà mon problème.

J’ai finalement regardé, c’est assez simple, mais faut faire attention quant à la sub ou tu places ton appel a HTML::Entities. Un diff pour te montrer le concept :
mdown.pastebin.com/m583a350d

Testé en latin1 (iso8859-1) utf8 et cyrillique :

*	Поле битвы осталось за японским ВМФ, который поплатился за победу

Devient:

<li>&#x41F;&#x43E;&#x43B;&#x435; &#x431;&#x438;&#x442;&#x432;&#x44B; &#x43E;&#x441;&#x442;&#x430;&#x43B;&#x43E;&#x441;&#x44C; &#x437;&#x430; &#x44F;&#x43F;&#x43E;&#x43D;&#x441;&#x43A;&#x438;&#x43C; &#x412;&#x41C;&#x424;, &#x43A;&#x43E;&#x442;&#x43E;&#x440;&#x44B;&#x439; &#x43F;&#x43E;&#x43F;&#x43B;&#x430;&#x442;&#x438;&#x43B;&#x441;&#x44F; &#x437;&#x430; &#x43F;&#x43E;&#x431;&#x435;&#x434;&#x443; </li>

:mrgreen:

Ok, j’ai fait les modifs nécessaires, avec demo à l’appui dans le tar.gz. La vérification de récursivité pour les listes est un peu faiblarde, la fonction _Entitize n’est peut être pas super top optimale non plus. Et j’ai commenté le code complétement modifié au lieu de le virer :

Quoiqu’il en soit je trouve ta solution plus interessante, vu que Markdown mets de coté le HTML inline de la source.

[quote=“Knucky”][code]

  • Поле битвы осталось за японским ВМФ, который поплатился за победу
    [/code][/quote]Tu avais l’inspiration guerrière ce jour là? :slightly_smiling:

Bon en fait j’ai fait des tests avec Lynx et au final accents tranformés ou pas c’est le réglage de la locale de l’internaute qui fera la différence.

Je te remercie d’avoir passer du temps sur cette question,
il me manque les connaissances en perl pour bien comprendre tes modifications,
et les avantages de telle ou telle méthode.
La tienne semble efficace pour beaucoup plus de caractères que la mienne, il faudra que je prenne le temps de la tester.

Un mail envoyé au dev de Markdown m’a confirmé qu’il était prévu pour le fonctionner avec UTF-8 et qu’il n’y a en fait pas de problèmes. (juste les sources qui ne sont pas du pur html)

En gros on a un peu perdu du temps :smt003

J’ai pris ce qu’il y avait sur la page d’accueil de wikipedia, ça devait parler d’une bataille de la seconde guerre mondiale je pense :smiley:

Non, j’ai trouvé une méthode ultime pour me sortir du perl encoding hell, l’encodage des caractères avec perl étant un sérieux foutoir :smt093