obtenir l'encodage d'un fichier css
Le
Une Bévue

j'ai besoin d'obtenir l'encodage d'un fichier css, par programme et donc
"a priori".
par exemple celui-ci :
http://www.certiferme.com/commun.css
si je regarde avec lynx :
$ lynx -head -dump http://www.certiferme.com/commun.css
HTTP/1.1 200 OK
Date: Sat, 29 Sep 2012 07:05:00 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 with Suhosin-Patch
Last-Modified: Thu, 26 Apr 2012 14:59:35 GMT
ETag: "7e0224-1d3b7-4be963c6d23c0"
Accept-Ranges: bytes
Content-Length: 119735
Connection: close
Content-Type: text/css
l'encodage n'est pas donné, si j'ouvre ce fichier avec TextWrangler (sur
Mac OS X Lion) ça me donne "Western (Mac OS X Roman)"
et les retours chariot étant en "Windows (CRLF)".
j'ai besoin de connaître l'encodage de ce fichier pour le transcoder en
UTF-8, car je recherche systématiquement dans les fichiers css les
"@import url" afin de les importer localement.
donc, comment obtenir cet encodage ?
"a priori".
par exemple celui-ci :
http://www.certiferme.com/commun.css
si je regarde avec lynx :
$ lynx -head -dump http://www.certiferme.com/commun.css
HTTP/1.1 200 OK
Date: Sat, 29 Sep 2012 07:05:00 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 with Suhosin-Patch
Last-Modified: Thu, 26 Apr 2012 14:59:35 GMT
ETag: "7e0224-1d3b7-4be963c6d23c0"
Accept-Ranges: bytes
Content-Length: 119735
Connection: close
Content-Type: text/css
l'encodage n'est pas donné, si j'ouvre ce fichier avec TextWrangler (sur
Mac OS X Lion) ça me donne "Western (Mac OS X Roman)"
et les retours chariot étant en "Windows (CRLF)".
j'ai besoin de connaître l'encodage de ce fichier pour le transcoder en
UTF-8, car je recherche systématiquement dans les fichiers css les
"@import url" afin de les importer localement.
donc, comment obtenir cet encodage ?
En général, sauf tours vicieux, un fichier css est de l'ASCII pur (pas de
caractères accentués ou étrangers).
Je suppose que "TextWrangler" prend son encodage par défaut (celui du
Mac). Mon Firefox donne "ISO-8859-1" (son encodage par défaut ?).
Un transcodage "UTF-8" donnera la même chose, AMHA...
Une Bévue a tapoté, le 29/09/2012 09:20:
Seamonkey, en faisant "Control i" me dit : ISO-8859-1
--
Stéphane BOFH excuse #161:
monitor VLF leakage
Ben moi il me donne windows-1252 !
--
M.H.
ben oui, c'est bien ce que je pense MAIS, ruby me dit le contraire, ce
n'est pas de l'ascii, d'ailleurs, le caractère @ existe t'il en ascii ?
ben il devrait me donner l'encodage du fichier non ?
ou alors TextWe-rangler fait une conversion auto ?
ben oui, si c'est de l'ascii.
bon, j'ai fait quelques essais avec des librairies de détection en ruby,
résultats pas fameux, la première essayée :
"chardet" le code ne marche pas tel quel, j'ai du corriger des erreurs de syntaxes
en ruby...
ça date de deux ans.
la seconde rchardet1.9
url = http://www.certiferme.com/commun.css
CharDet.detect(css).confidence = 0.7217099325349031
CharDet.detect(css).encoding = ISO-8859-2
ce fichier "http://www.certiferme.com/commun.css" téléchargé et converti
en UTF-8 par TextWrangler dans le fichier "commun-utf8.css" :
url = certiferme-RECETTE TARTE AUX RAISINS, RECETTE TARTE AUX RAISINS,
DESSERT avec photo_files/commun-utf8.css
CharDet.detect(css).confidence = 0.7525
CharDet.detect(css).encoding = utf-8
il semblerait donc que ce soit de l'ISO-8859-2, donc j'essaie la
conversion ISO -> UTF-8 :
CharDet.detect(css_utf8).confidence = 0.7525
CharDet.detect(css_utf8).encoding = utf-8
après avoir ajouté :
css_utf8=css.encode('UTF-8', cd.encoding)
le code ruby si quelqu'un est intéressé :
require 'rchardet19'
css=open(url) { |f| f.read }
cd=CharDet.detect(css)
puts "CharDet.detect(css).confidence = #{cd.confidence}"
# -> CharDet.detect(css).confidence = 0.7217099325349031
puts "CharDet.detect(css).encoding = #{cd.encoding}"
# -> CharDet.detect(css).encoding = ISO-8859-2
css_utf8=css.encode('UTF-8', cd.encoding)
cd=CharDet.detect(css_utf8)
puts "CharDet.detect(css_utf8).confidence = #{cd.confidence}"
# -> CharDet.detect(css_utf8).confidence = 0.7525
puts "CharDet.detect(css_utf8).encoding = #{cd.encoding}"
# -> CharDet.detect(css_utf8).encoding = utf-8
donc, ça devrait rouler (?), d'après la doc, la détection est ok si
#confidence est > 0.6.
quel bordel, cette détection.
la librairie rchardet19 (pour ruby 1.9.+) me donne "ISO-8859-2" avec un
degré de confidence de "0.72".
Bien sûr : 0x40 (ou 64 en décimal)
cf http://fr.wikipedia.org/wiki/
American_Standard_Code_for_Information_Interchange
Idem chez moi (chardet livré de base avec ma distribution Linux).
Que dit un diff entre la version d'origine et la version utf-8 ? Ça a des
chances d'être les mêmes fichiers, au transcodage des fin de ligne et
l'éventuel BOM rajouté par ton transcodeur.
c'est laquelle de distrib ?
perso je suis en Xubuntu / Voyager 12.04 LTS.
j'envisage de passer à Manjaro (version XFCE de Arch), mais il faut que
je teste les paquets car j'ai besoin de :
Apache2 + php, PostgreSQL
Ruby s'installe à part avec rvm.
Je ne sais pas trop utilisé diff, j'ai fait "bêtement" un :
$ diff commun-utf8.css commun.css
qui me donne :
1,4680c1,4680
puis des tas de lignes css précédées de "<"
4682,4826c4682,4826
et des tas de lignes css précédées de ">"
Bon, après un chti coup de man et :
$ diff -E -w -B --strip-trailing-cr commun-utf8.css commun.css
j'obtiens qqc de plus lisible :
878c878
< /* !: Le total width+margin-top+margin-left doit etre egal ‡ 535px */;
---
535px */;
4096c4096
< /* Mots clÈ de bas de page */
---
CONCLUSION : ce sont des commentaires qui posaient problème...
bon sur Linux j'ai bien chardet, pas sur Mac OS X, je l'ai en lib ruby
(gem), ça me suffit.
Linux Mint Maya (basé sur Ubuntu 1.04). Donc je suppose, le même...
Linux Mint Maya (basé sur Ubuntu 12.04). Donc je suppose, le même...