Why is there a difference between text and binary files in Windows?
Réponse courte
Il n'y en a pas.
Réponse longue
En réalité, je suppose qu'il n'y a littéralement aucune différence entre un fichier texte et un fichier binaire, puisqu'il s'agit dans les deux cas d'une simple collection d'octets. Un fichier texte peut être facilement représentable [sic] dans un éditeur en fonction de l'encodage, alors qu'un fichier binaire ne le sera généralement pas, mais la représentation sous-jacente est la même : une séquence d'octets dans un ordre donné.
Comme vous l'avez dit, un fichier n'est qu'un ensemble d'octets. C'est tout. Son contenu n'a de sens que lorsqu'il est interprété par un programme . Il est tout à fait possible qu'un programme interprète les octets d'un fichier d'une certaine manière et qu'un autre programme les interprète d'une autre manière. Lorsque vous ouvrez un fichier "binaire" dans un éditeur de texte, celui-ci interprète les octets comme du texte et les affiche. Si le fichier n'est pas du "texte brut", les résultats seront probablement du charabia, mais le programme continue à faire son travail d'interprétation et de sortie.
Dans de nombreux langages de programmation, il existe des constructions permettant de contourner le fait que Windows fait la différence entre les fichiers texte et les fichiers binaires.
Ce n'est pas le cas de Windows. Ce qui se passe, c'est que la plupart de ces langages de programmation ont évolué sur d'autres systèmes d'exploitation tels qu'Unix, Linux, etc. et utilisent donc des fins de ligne différentes pour les fichiers de texte brut natifs. Il est possible qu'ils utilisent également un encodage différent, mais ce sont généralement les fins de ligne qui varient d'une plate-forme à l'autre.
Voici une liste des plates-formes et des fins de ligne les plus courantes :
- Unix, Linux - saut de ligne
- Windows - retour chariot, saut de ligne
- Mac (historiquement) - retour de chariot
- (Quelques anciens systèmes d'exploitation (par exemple, Acorn BBC) - saut de ligne, retour chariot)
Pourquoi Windows fait-il cette distinction qui n'est apparemment pas nécessaire ?
Windows est un système d'exploitation, il ne distingue rien en soi. La question que vous devez vous poser est de savoir quel pièces de Windows se distinguent. Dans ce cas, c'est la fenêtre de commande qui traite différemment les fichiers texte et les fichiers binaires, et même dans ce cas, cela dépend de la commande utilisée. Par exemple, la commande del foobar.txt
n'est pas différent de del foobar.bin
Cependant copy a.txt + b.txt c.txt
est différent de copy /b a.bin + b.bin c.bin
Pourquoi ? Parce que l'invite de commande de Windows veut être utile et interprète les fichiers texte comme tels et copie le fichier lignes à la sortie (en ajoutant une nouvelle ligne entre les fichiers), mais copie les fichiers binaires en l'état sans interférence.
Par exemple, en Ruby :
f = File.open('filename.bin', 'rb') # read a file in binary mode
f = File.open('filename.txt', 'r') # read a file in text mode
En Python :
f = open("filename.bin", "rb") # read a file in binary mode
f = open("filename.txt", "r") # read a file in text mode
Sur d'autres systèmes d'exploitation, il semble qu'il n'y ait pas de différence entre un fichier texte et un fichier binaire dans le système de fichiers.
Il s'agit de langages de script, qui s'exécutent donc à partir de la ligne de commande. Lorsque vous travaillez avec des fichiers texte, il n'y a généralement pas de problème, mais avec des fichiers binaires, vous utilisez le mode binaire pour éviter que l'invite de commande ne prétraite le fichier et ne le transmette sous forme d'octets bruts.
Sous Linux, lorsque vous tapez ou pipetez un fichier, le Shell transmet tous les octets bruts au lieu de les prétraiter en tant que texte comme le fait l'invite de commande de Windows.
Cela dit, en fonction du programme et de la manière dont le fichier d'entrée est transmis, il est possible d'éviter complètement le prétraitement. Par exemple C:\>pyhton foobar.py baz.bin
passerait l'étape de la nom du fichier d'entrée au script qui l'ouvrirait alors à sa guise alors que C:\>type baz.bin | python foobar.py
entraînerait la lecture du fichier par l'invite de commande, puis le passage de la commande chaque ligne au script, ce qui pour un fichier binaire n'est pas bon.
Les différents modes permettent simplement flexibilité et vous permettent de jouer la carte de la sécurité et de traiter les fichiers comme vous l'entendez.