ASCII vs binaire vs auto?

16

Je transfère des fichiers entre des serveurs et je viens de commencer à remarquer que certains d'entre eux sont modifiés pour devenir une longue ligne continue au lieu d'avoir les retours et les sauts de ligne qu'ils avaient à l'origine. Je suppose que cela a quelque chose à voir avec le type de transfert de mon client FTP qui était initialement défini sur "Auto", mais arborant "Binary" et "ASCII" comme options supplémentaires.

En bref, quelles sont les différences entre les façons dont je transfère un fichier d'un serveur à un autre, et ces différences seront-elles capables de modifier le fichier de la manière que j'ai mentionnée ci-dessus?

Transférer DE de Windows À Linux.

Sampson
la source

Réponses:

27

Le mode de transfert "binaire" de FTP copie les fichiers exactement, octet par octet. Simple et direct.

Cependant, lorsque vous importez des fichiers texte entre différents systèmes d'exploitation, ce n'est peut-être pas ce que vous voulez - différents systèmes d'exploitation utilisent des codes différents pour représenter les sauts de ligne. Le mode "ASCII" existe à cet effet: il traduit automatiquement toutes les fins de ligne du format du système source vers celui de destination.

Pas sûr de "Auto", mais j'imagine qu'il semble que l'extension du fichier ou quelque chose de similaire pour décider s'il s'agit d'un fichier texte, et essaie de deviner le mode approprié.

Le mode que vous voulez dépend exactement de ce que vous faites avec les fichiers ... si vous les copiez simplement pour les sauvegarder, vous voudrez probablement copier en mode binaire afin qu'ils soient exactement les mêmes lorsque vous les restaurez plus tard sur le serveur Windows. S'ils doivent être utilisables en tant que fichiers texte (peut-être en tant que fichiers de configuration pour un programme multiplateforme?) Des deux côtés, vous voudrez utiliser le mode ASCII pour les traduire.

EDIT: Pour autant que je peux dire, les fichiers FTPing de Windows à Linux ne devrait jamais entraîner des sauts de ligne disparaître ... cependant , si vous les copiez en mode ASCII, puis les ramener en arrière au serveur Windows en mode binaire, Linux les fins de ligne de style peuvent ne pas être reconnues sur la boîte Windows. (Le bloc-notes ne les verra pas; Wordpad le verra; YMMV avec d'autres logiciels.)

(Aujourd'hui, une telle commodité - convertir automatiquement les fins de ligne - peut sembler étrange dans un protocole de base tel que FTP. Cependant, lorsque FTP a été inventé, l'envoi de fichiers texte était la norme, et l'un des objectifs du protocole était de faire c'est aussi simple que possible.)

Josh
la source
Grande description des deux. Je me sens beaucoup moins confus maintenant.
Sampson
merci je n'ai jamais compris l'intérêt de ce mode ASCII, et maintenant je n'utiliserai certainement que le mode binaire
Kiwy
3

Il y a des différences en effet, et ils joueront avec vos transferts de fichiers en texte brut sauf si vous utilisez l'option binaire - utilisez généralement toujours si ok :)

Chopper3
la source
N'y a-t-il aucun moyen de les restaurer? Ou dois-je simplement transférer avec Binary maintenant pour éviter à nouveau cela à l'avenir?
Sampson
Je suis sûr que vous pourriez les décrocher, mais cela pourrait prendre du temps, je serais fortement tenté de les retransmettre.
Chopper3
1

À partir de quel système d'exploitation transférez-vous des fichiers? Linux / Unix utilisent des sauts de ligne différents, puis Windows. Donc, si vous générez un fichier sur un ordinateur Linux et l'ouvrez sur Windows, cela peut sembler bizarre. Il y a des utilitaires pour corriger cela, mais d'après mon expérience, si vous utilisez un pavé Word sur Windows au lieu du bloc-notes, tout ira bien.

einstiien
la source
Je les crée sur Windows dans un IDE, puis je les déplace sur le serveur Linux. À une date ultérieure, je les ouvre depuis le serveur Linux pour trouver la longue ligne continue.
Sampson
Essayez de courir dos2unixet voyez si cela corrige les lignes
einstiien
1

Windows et Unix ont des octets différents à la fin des lignes (Windows un hex 0D 0A, Unix juste un 0A). Lors du transfert de fichiers en mode binaire, les octets d'un fichier seront déplacés d'un ordinateur sans changement. Ceci est requis pour les formats binaires (par exemple les fichiers ZIP, les images, etc.) mais peut entraîner des problèmes avec les fichiers texte: par exemple, notepad.exe sur Windows affichera un fichier texte avec juste des sauts de ligne de style Unix comme une longue ligne, un éditeur Unix peut afficher ^ M à la fin de chaque ligne lorsque vous voyez le style Windows.

Donc, techniquement, pour les formats binaires (zip, jpg, png et autres), vous devez définir le FTP sur BINARY, tandis que pour les formats de texte (HTML, PHP, CGI, etc.), vous devez le définir sur ASCII.

La plupart des bons programmes FTP ont également un réglage automatique, ce qui signifie qu'ils détermineront le mode (BINARY ou ASCII) en fonction des extensions de fichier bien connues, par exemple, il basculera automatiquement le transfert du fichier JPG vers BINARY et enverra / recevra un fichier PHP en ASCII mode.

Yamodax
la source