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

Détecter des fichiers binaires

7 réponses
Avatar
dagecko
Bonjour

J'aimerais savoir comment détecter si un fichier est binaire
ou pas. Mais actuellement je ne vois pas trop comment m'y prendre.
Si quelqu'un a une idée...

merci.

7 réponses

Avatar
Fabien LE LEZ
On Wed, 08 Feb 2006 18:01:36 +0100, dagecko :

J'aimerais savoir comment détecter si un fichier est binaire
ou pas.


Si tu cherches un algorithme, cf fr.comp.algorithmes.
Tu peux aussi jeter un coup d'oeil sur les sources (ou le manuel) de
file : <ftp://ftp.astron.com/pub/file>.

Avatar
dagecko
Le Wed, 08 Feb 2006 19:18:10 +0100, Fabien LE LEZ a écrit :

On Wed, 08 Feb 2006 18:01:36 +0100, dagecko :

J'aimerais savoir comment détecter si un fichier est binaire
ou pas.


Si tu cherches un algorithme, cf fr.comp.algorithmes.
Tu peux aussi jeter un coup d'oeil sur les sources (ou le manuel) de
file : <ftp://ftp.astron.com/pub/file>.


Merci, ça va m'aider je pense.


Avatar
kanze
dagecko wrote:

J'aimerais savoir comment détecter si un fichier est binaire
ou pas. Mais actuellement je ne vois pas trop comment m'y
prendre. Si quelqu'un a une idée...


Strictement parlant, c'est impossible. Si j'écris les quatres
entiers 0538976328, 1701604463, 0740325231, 1919706122 en
binaire sur ma machine (grand-boutienne), le résultat serait
indistinguable de si j'avais écrit " Hello, worldn" en texte.
Comment veux-tu qu'un programme qui n'a accès qu'un contenu du
fichier puisse déviner qu'il s'agit en fait de quatre entiers en
binaire ?

Ayant dit celà, on peut arriver à des heuristiques qui ne se
trompent pas trop. Donc, par exemple, si tu lis les 512 premiers
octets, et il sont tous ou dans l'intervalle 0x20-0x7E, ou 0x0A,
0x09 ou 0x0D, la probabilité qu'il s'agit du texte est très
forte. En revanche, des suites étendues (plus de quatre octets,
en tout cas) des octets strictement inférieur à 0x20, autre que
dans l'intervale 0x09-0x0D, est proablement binaire (à moins
d'être une suite de caractères accentués est-européens en
UTF-16).

Note que la présence des encodages divers rend le problème plus
difficile. Sous Unix, il y avait (et il y en a encore, je crois)
une tradition de commencer des fichiers binaires par des octets
« magiques » qui signaler le type. En choisissant des valeurs
qui n'apparaîtrait pas dans un fichier de texte. Donc, sur le
premier Unix où j'ai travaillé, un fichier objet commençait
toujours avec les deux octets 0x01, 0x03. En ASCII, pas de
problème, mais dans un fichier en UTF-16BE, ça correspond à un
a minuscule avec un accent brève. (Heureusement que la
probabilité qu'un texte commence précisement avec ce caractère
est assez faible.)

Enfin, je ne négligerais pas les conventions de nommage non
plus. Si le nom du fichier termine par .o ou .a (ou .obj, .exe
ou .lib sous Windows), on n'a typiquement pas besoin d'aller
plus loin pour considérer que c'est du binaire. Mais il faut y
aller avec des pincettes : si un fichier dont le nom se termine
en .xls est prèsque sûrement Excel (et donc binaire), je
n'exclurais pas que quelqu'un nom ses fichiers de documentation
text en .doc.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
Ploc
dagecko wrote:
Bonjour

J'aimerais savoir comment détecter si un fichier est binaire
ou pas. Mais actuellement je ne vois pas trop comment m'y prendre.
Si quelqu'un a une idée...

merci.


le commande "file" sous linux fait ca tres bien.
Il n'y a qu'a regarder le code pour s'en inspirer, mais c'est OT ici.

Avatar
Fabien LE LEZ
On 9 Feb 2006 01:35:16 -0800, "kanze" :

je
n'exclurais pas que quelqu'un nom ses fichiers de documentation
text en .doc.


Et je confirme que j'ai vu énormément de fichiers textes d'extension
.doc. Surtoutà l'époque du DOS, mais on en trouve encore quelques-uns.

Avatar
dagecko
Le Thu, 09 Feb 2006 16:08:27 +0100, Fabien LE LEZ a écrit :

On 9 Feb 2006 01:35:16 -0800, "kanze" :

je
n'exclurais pas que quelqu'un nom ses fichiers de documentation
text en .doc.


Et je confirme que j'ai vu énormément de fichiers textes d'extension
.doc. Surtoutà l'époque du DOS, mais on en trouve encore quelques-uns.


Je ne tiens pas à me baser sur les extensions.


Avatar
kanze
Ploc wrote:
dagecko wrote:

J'aimerais savoir comment détecter si un fichier est binaire
ou pas. Mais actuellement je ne vois pas trop comment m'y
prendre. Si quelqu'un a une idée...


le commande "file" sous linux fait ca tres bien.


La commande "file" sous Unix fait beaucoup plus. Et se trompe
souvent.

Il n'y a qu'a regarder le code pour s'en inspirer, mais c'est
OT ici.


La commande "file" est beaucoup plus complexe que ce qu'il lui
faut. Elle se base en partie sur un fichier qui décrit des clés
à chercher pour chaque type de fichier. Elle se sert aussi d'un
certain nombre d'heuristiques, surtout sur des fichiers ASCII.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34