Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

deviner le charset d'un fichier html local

21 réponses
Avatar
pere.noel
j'ai une petite appli qui transforme des fichiers html locaux :

html -> xhtml -> ajout d'un menu -> publication (en xhtml mais avec
l'extension html.

bon, la conversion html -> xhtml se fait par tidy, à qui je dois donner
le charset entrant (en sortie je bascule tout en UTF-8)

là j'ai un problème de détection, je vien de faire un petit script ruby
qui détecte le charset, résultat des courses : 10 fichiers sur 26 n'ont
pas défini le charset dans une balise meta.

sur "fr.comp.infosystemes.www.auteurs" "on" me dit que cette balise
n'est qu'un pis-aller.

qu'il faut utiliser l'en-tête HTTP, ce qui n'est pas possible dans mon
cas vu que les fichiers sont locaux, sauvegardés dans un répertoire...

perso je pense attribuer "US-ASCII" à tous les fichiers qui ne déclarent
pas leur charset, par ce que c'est mieux que rien.

notes que je converti tout en UTF-8 pparce que j'ajoute de l'UTF-8 à la
page en question.

pensez-vous que ce soit uen bonne idée ???

savez vous qqc sur l'autodéttection du charset par les navigateurs ?

--
une bévue

10 réponses

1 2 3
Avatar
lap
savez vous qqc sur l'autodéttection du charset par les navigateurs ?


As-tu testé la commande file(1) ?

LaP

Avatar
pere.noel
lap wrote:


As-tu testé la commande file(1) ?


ben non, bonne idée, ça doit-être plus effeicace que mon script ???

alors si je regarde une de celle qui n'a pas le charset inclu :
file -i Apple-env-var.html
Apple-env-var.html: text/html



file Apple-env-var.html
Apple-env-var.html: HTML document text



une de celles dont je connais le charset, par mon script :
file fonts-list-tiger.html
fonts-list-tiger.html: HTML document text


(avec l'option -i ou --mime ça ne donne pas + le charset contrairement à
ce que prétend le man...)

mais bon, je n'ai eu qu'un coup d'oeil rapide au man qui parle bien de
la détection du charset et même du langage...

merci pour l'info !

--
une bévue

Avatar
Eric Jacoboni
(Une bévue) writes:

savez vous qqc sur l'autodéttection du charset par les navigateurs ?


Ça ne répond pas à ta question, mais pour régler cet histoire
d'encodage, je n'utilise que des entités HTML : aucun accent ou autre
caractère spécifique. Comme ça, je n'ai jamais de problèmes :)

--
Eric Jacoboni, ne il y a 1445970928 secondes

Avatar
Eric Jacoboni
jose.campos+ (José Campos) writes:

C'est pourtant tellement reposant de coller un charset utf-8 oukifo
et ensuite de taper sans soucis ;-)


Ah, mais je tape sans souci : avec les accents et tout le toutim... Je
fais simplement une passe de conversion du fichier avant de le mettre
en ligne, c'est tout.

--
Eric Jacoboni, ne il y a 1445971443 secondes

Avatar
pere.noel
Eric Jacoboni wrote:


Ça ne répond pas à ta question, mais pour régler cet histoire
d'encodage, je n'utilise que des entités HTML : aucun accent ou autre
caractère spécifique. Comme ça, je n'ai jamais de problèmes :)


ouiais, ok, mais les entités il faut les déclarer, parce que je mouline
coome ça :

html -- (via tidy) -> xhtml

xhtml -- (via xsltproc pour ajout d'un menu en utf-8) --> xhtml

mais bon, c'est une idée de passer par des entités, encore faut-il que
je file à tidy le bon charset, car c'est lui quiva faire la conversion
char value sup à 127 -> entité.

le fichier original je n'en suis pas maître, sinon j'aurais réglè ça par
de l'utf-8 ;-)
--
une bévue

Avatar
Eric Jacoboni
(Une bévue) writes:


mais bon, c'est une idée de passer par des entités, encore faut-il que
je file à tidy le bon charset, car c'est lui quiva faire la conversion
char value sup à 127 -> entité.


En ce cas-là, file est ton ami :

% file *.py
(...)
cb2_19_9_exm_2.py: ASCII text
cb2_19_9_exm_3.py: ASCII text
cb2_19_9_exm_4.py: ASCII text
cb2_19_9_exm_5.py: UTF-8 Unicode text
cb2_19_9_sol_1.py: ASCII text
cb2_19_9_sol_2.py: ASCII text
(...)

Le problème est qu'avec des fichiers HTML, il va te les marquer comme
HTML, quel que soit l'encodage :

% file index.rhtml
index.rhtml: HTML document text

Pour lui faire sauter les caractères qui lui disent que le fichier
contient effectivement du HTML, tu peux faire dans le 'ad hoc' :

% tail -c +30 index.rhtml|file -
/dev/stdin: ASCII text

--
Eric Jacoboni, ne il y a 1445972433 secondes

Avatar
pere.noel
Eric Jacoboni wrote:

Pour lui faire sauter les caractères qui lui disent que le fichier
contient effectivement du HTML, tu peux faire dans le 'ad hoc' :

% tail -c +30 index.rhtml|file -
/dev/stdin: ASCII text


je suis mort de rire ))), mattes mon résultat :
getCharset_test%> tail -c +30 Apple-env-var.html |file -
/dev/stdin: ASCII text, with CR, LF line terminators

UTF-8 d'après SubEthaEdit

getCharset_test%> tail -c +30 entities-html4.html |file -
/dev/stdin: ASCII HTML document text

MacOS Roman d'après SubEthaEdit la balise meta donnant ISO-8859-1

getCharset_test%> tail -c +30 fonts-list-tiger.html |file -
/dev/stdin: ASCII text, with very long lines
------------------------^^^^^^^^^^^^^^^^^^^^^
drolatique...
file s'épuise ?

UTF-8 d'après SubEthaEdit idem dans la balise meta.

ce qui est amusant, aussi, c'est que, quand j'ai un fichier en UTF-8 que
je le dis à tidy il me bascule ça en Mac OS Roman, sans bien évidemment
changer la balise meta...


donc file, pour le html, c'est une daube ?

--
une bévue

Avatar
Eric Jacoboni
(Une bévue) writes:

donc file, pour le html, c'est une daube ?


Il semblerait, donc...

Je prescris alors une transformation à la mano via iconv ou consorts
dans un unique format d'arrivée (UTF-8, mettons) et conversion illico-
presto des caractères accentués en entités pour que les problèmes de
détection du codage par les clients n'en soient plus (des
problèmes...).

--
Eric Jacoboni, ne il y a 1445979206 secondes

Avatar
Eric Jacoboni
jose.campos+ (José Campos) writes:

Même si, comme me le recommande madame W3C[1], je colle :

<?xml version="1.0" encoding="UTF-8"?>
et
<meta http-equiv='content-type' content='text/html; charset=utf-8' />


C'est aussi ce que je fais : mais pourquoi échapper les " ?


D'ailleurs, comment récupère-t-on le dit en-tête? je ne le vois pas
dans $_SERVER[].


C'est quoi, $_SERVER[] ?

--
Eric Jacoboni, ne il y a 1445979544 secondes

Avatar
pere.noel
Eric Jacoboni wrote:


Je prescris alors une transformation à la mano via iconv ou consorts
dans un unique format d'arrivée (UTF-8, mettons) et conversion illico-
presto des caractères accentués en entités pour que les problèmes de
détection du codage par les clients n'en soient plus (des
problèmes...).


c'est ce que j'ai fait ))

car html tidy m@&rde complétement sur ce coup :
quand on lui dit : en entrée c'est de l'iso-8859-1
je veux en sortie de l'utf-8

il sort un fichier en MacOS Roman (d'après SubEthaEdit) et indique un
charset us-ascii ....

pas mal non ?


--
une bévue

1 2 3