Question

Ai-je raison de supposer que la seule différence entre les « fichiers Windows » et les « fichiers Unix » est le saut de ligne ?

Nous avons un système qui a été déplacé d'une machine Windows vers une machine Unix et nous rencontrons des problèmes avec le format.

Je dois automatiser la traduction entre Unix/Windows avant que les fichiers ne soient livrés au système dans notre "système de transport".J'aurai probablement besoin de quelque chose pour déterminer le format actuel et de quelque chose pour le transformer dans l'autre format.Si c'est juste la nouvelle ligne qui fait la grande différence, j'envisage simplement de lire les fichiers avec java.io.Autant que je sache, ils sont capables de gérer les deux avec readLine.Et puis réécrivez simplement chaque ligne avec

while (line = readline)
    print(line + NewlineInOtherFormat)
....

Résumé:

samjudson:

Il s'agit uniquement d'une différence dans les fichiers texte, où UNIX utilise un seul saut de ligne (LF) pour signifier une nouvelle ligne, Windows utilise un retour chariot/saut de ligne (CRLF) et Mac utilise simplement un CR.

à laquelle Cebjyre élabore :

OS X utilise LF, comme UNIX - MacOS 9 et versions antérieures utilisaient cependant CR

Mo

Il pourrait également y avoir une différence dans le codage des caractères nationaux.Il n'y a pas de "codage Unix", mais de nombreuses variantes Linux utilisent UTF-8 comme codage par défaut.Mac OS (qui est aussi un Unix) utilise son propre encodage (macroman).Je ne suis pas sûr de ce qu'est l'encodage par défaut de Windows.

McDowell

Outre les différences entre les nouvelles lignes, la marque d'ordre des octets peut poser des problèmes si les fichiers sont traités comme Unicode sous Windows.

Effronté et doux

Cependant, un autre ensemble de problèmes que vous pourriez rencontrer peuvent être liés aux codages de caractères sur un ou plusieurs octets.Si vous voyez des caractères étranges et inattendus (pas en fin de ligne), cela pourrait en être la raison.Surtout si vous voyez des cases carrées, des points d'interrogation, des points d'interrogation à l'envers, des caractères supplémentaires ou des caractères accentués inattendus.

Sadie

Sous Unix, les fichiers commençant par .sont cachés.Sous Windows, il s'agit d'un indicateur du système de fichiers auquel vous n'avez probablement pas facilement accès.Cela peut avoir pour conséquence que des fichiers censés être masqués deviennent désormais visibles sur les ordinateurs clients.

Les autorisations de fichiers varient entre les deux.Vous constaterez probablement, lorsque vous copiez des fichiers sur un système Unix, que les fichiers appartiennent désormais à l'utilisateur qui a effectué la copie et disposent de droits limités.Vous devrez utiliser chown/chmod pour vous assurer que les bons utilisateurs y ont accès.

Il existe des outils pour résoudre le problème :

pauldoo

Si vous êtes uniquement intéressé par le contenu des fichiers texte, alors oui, les fins de ligne sont différentes.Jetez un œil à quelque chose comme dos2unix, cela peut être utile ici.

Effronté et doux

Comme le suggère Pauldoo, des outils comme dos2unix peuvent être très utiles.Notez que ceux-ci peuvent se trouver sur votre système Linux/Unix sous le nom de fromdos ou tofrodos, ou peut-être même en tant que recode de la boîte à outils à usage général.

Aide pour le codage Java

Effronté et doux

Lors de l'écriture dans des fichiers ou de la lecture de fichiers (que vous contrôlez), il est souvent utile de spécifier l'encodage à utiliser, car la plupart des méthodes Java le permettent.Cependant, s'assurer également que les paramètres régionaux du système correspondent peut éviter bien des problèmes.

Était-ce utile?

La solution

Il s'agit uniquement d'une différence dans les fichiers texte, où UNIX utilise un seul saut de ligne (LF) pour signifier une nouvelle ligne, Windows utilise un retour chariot/saut de ligne (CRLF) et Mac utilise simplement un CR.

Fichiers binaires, il ne devrait y avoir aucune différence (c'est-à-direun JPEG sur une machine Windows sera octet par octet identique au même JPEG sur une machine Unix.)

Autres conseils

Il pourrait également y avoir une différence dans le codage des caractères nationaux.Il n'y a pas de "codage Unix", mais de nombreuses variantes Linux utilisent UTF-8 comme codage par défaut.Mac OS (qui est aussi un Unix) utilise son propre encodage (macroman).Je ne suis pas sûr de ce qu'est l'encodage par défaut de Windows.

Mais cela pourrait être une autre source de problèmes (outre les différents sauts de ligne).

Quels sont vos problèmes ?Les problèmes liés aux sauts de ligne peuvent être facilement corrigés avec les programmes dos2unix ou unix2dos sur la machine unix

Si vous êtes uniquement intéressé par le contenu des fichiers texte, alors oui, les fins de ligne sont différentes.Jetez un oeil à quelque chose comme dos2unix, cela peut être utile ici.

(Bien sûr, il y a beaucoup d'autres choses qui différencient les fichiers Unix et Windows, mais je ne pense pas que ces autres différences vous intéressent pour le moment.)

En plus des réponses données, vous pouvez rencontrer des problèmes avec les différents systèmes de fichiers :

  • Sous Unix, les fichiers commençant par un . sont cachés.Sous Windows, il s'agit d'un indicateur du système de fichiers auquel vous n'avez probablement pas facilement accès.Cela peut avoir pour conséquence que des fichiers censés être masqués deviennent désormais visibles sur les ordinateurs clients.

  • Les autorisations de fichiers varient entre les deux.Vous constaterez probablement, lorsque vous copiez des fichiers sur un système Unix, que les fichiers appartiennent désormais à l'utilisateur qui a effectué la copie et disposent de droits limités.Vous devrez utiliser chown/chmod pour vous assurer que les bons utilisateurs y ont accès.

En plus des différences de nouvelle ligne, le marque d'ordre des octets peut causer des problèmes si les fichiers sont traités comme Unicode sous Windows.

Comme le suggère Pauldoo, des outils comme dos2unix peuvent être très utiles.Notez que ceux-ci peuvent être sur votre système Linux/Unix comme à partir de dos ou tofrodos, ou peut-être même comme boîte à outils à usage général recoder.

Cependant, un autre ensemble de problèmes que vous pourriez rencontrer peuvent être liés aux codages de caractères sur un ou plusieurs octets.Si vous voyez des caractères étranges et inattendus (pas en fin de ligne), cela pourrait en être la raison.Surtout si vous voyez des cases carrées, des points d'interrogation, des points d'interrogation à l'envers, des caractères supplémentaires ou des caractères accentués inattendus.

Exécuter la commande lieu sur votre boîte * nix vous indiquera les paramètres régionaux du système.Si celui-ci est différent du codage utilisé dans les fichiers texte transférés depuis la machine Windows, cela peut parfois causer des problèmes, en fonction de l'utilisation de ces fichiers.Vous pouvez utiliser le très puissant recoder commande pour essayer de convertir entre les différents jeux de caractères ainsi que tout problème de fin de ligne. recoder -l vous montrera tous les formats et encodages entre lesquels l'outil peut convertir.La liste sera probablement TRÈS longue.

Lors de l'écriture dans des fichiers ou de la lecture de fichiers (que vous contrôlez), il est souvent utile de spécifier l'encodage à utiliser, car la plupart des méthodes Java le permettent.Cependant, s'assurer également que les paramètres régionaux du système correspondent peut éviter beaucoup de problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top