date: 27 May 2011 title: Lighttpd et encodage de fichiers texte tags: lighttpd, planet-evolix, planet-libre Voici une petite astuce pour résoudre le problème d'encodage des fichiers servis par Lighttpd, dans le cas où les fichiers en questions sont en UTF-8. En guise de rappel, Lighttpd est un serveur web simple, léger mais puissant par rapport à Apache. [Voir ici](http://www.lighttpd.net/) pour plus d'info. Par défaut l'encodage des fichiers n'est pas précisé dans le champ « Content-Type », comme le montre une requête HTTP HEAD : $ HEAD http://univers-libre.net/plop.txt 200 OK Connection: close Date: Fri, 27 May 2011 20:23:14 GMT Accept-Ranges: bytes ETag: "1885714849" Server: lighttpd/1.4.28 Content-Length: 7767 Content-Type: text/plain Last-Modified: Sun, 02 May 2010 09:34:31 GMT Client-Date: Fri, 27 May 2011 20:20:53 GMT Client-Peer: 192.168.0.60:80 Client-Response-Num: 1 Dans la majeure partie des cas, on s'en fou grave car l'encodage est précisé dans la balise HTML , et le client interprète donc bien le texte comme étant de l'UTF-8 (ou ce que vous voulez). Oui mais justement, lorsqu'on veut que Lighttpd serve de bêtes fichiers texte, nous n'avons plus cette balise pour nous aider. Il faut donc forcer le champ Content-Type pour rajouter charset=utf8 à la fin. Avec Apache, cela se fait en rajoutant la directive AddDefaultCharset. Sous Lighty, il faut redéfinir le type MIME en question, de cette manière : mimetype.assign += ( ".txt" => "text/plain; charset=utf8" ) Attention, petite particularité sous Debian (ce n'est peut-être pas spécifique à Debian non plus), les types MIME sont générés par un script perl /usr/share/lighttpd/create-mime.assign.pl, appelé dans la conf de lighttpd. Il faut donc bien faire attention à rajouter la ligne de conf ci-dessus *après* cette ligne : include_shell "/usr/share/lighttpd/create-mime.assign.pl"