Frage

Liege ich richtig in der Annahme, dass der einzige Unterschied zwischen „Windows-Dateien“ und „Unix-Dateien“ der Zeilenumbruch ist?

Wir haben ein System, das von einem Windows-Rechner auf einen Unix-Rechner verschoben wurde und Probleme mit dem Format hat.

Ich muss die Übersetzung zwischen Unix/Windows automatisieren, bevor die Dateien in unserem „Transportsystem“ an das System geliefert werden.Ich brauche wahrscheinlich etwas, um das aktuelle Format zu bestimmen und etwas, um es in das andere Format umzuwandeln.Wenn es nur der Zeilenumbruch ist, der den großen Unterschied ausmacht, denke ich darüber nach, die Dateien einfach mit java.io zu lesen.Soweit ich weiß, können sie mit readLine beides bewältigen.Und dann schreiben Sie einfach jede Zeile mit zurück

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

Zusammenfassung:

Samjudson:

Dies ist nur ein Unterschied bei Textdateien, bei denen UNIX einen einzelnen Zeilenvorschub (LF) verwendet, um eine neue Zeile anzuzeigen, Windows einen Wagenrücklauf/Zeilenvorschub (CRLF) und Mac nur einen CR.

zu welchem Cebjyre führt aus:

OS X verwendet LF, genau wie UNIX – MacOS 9 und niedriger verwendeten jedoch CR

Mo

Es könnte auch einen Unterschied in der Zeichenkodierung für nationale Zeichen geben.Es gibt keine „Unix-Kodierung“, aber viele Linux-Varianten verwenden UTF-8 als Standardkodierung.Mac OS (das auch ein Unix ist) verwendet eine eigene Kodierung (Macroman).Ich bin mir nicht sicher, welche Windows-Standardkodierung es ist.

McDowell

Zusätzlich zu den Unterschieden bei Zeilenumbrüchen kann die Markierung der Bytereihenfolge Probleme verursachen, wenn Dateien unter Windows als Unicode behandelt werden.

Cheekysoft

Eine weitere Reihe von Problemen, auf die Sie möglicherweise stoßen, kann jedoch mit Einzel-/Mehrbyte-Zeichenkodierungen zusammenhängen.Wenn Sie seltsame unerwartete Zeichen sehen (nicht am Zeilenende), könnte dies der Grund sein.Vor allem, wenn Sie quadratische Kästchen, Fragezeichen, auf dem Kopf stehende Fragezeichen, zusätzliche Zeichen oder unerwartete Akzentzeichen sehen.

Sadie

Unter Unix sind Dateien, die mit einem . beginnen.sind versteckt.Unter Windows handelt es sich um ein Dateisystem-Flag, auf das Sie wahrscheinlich keinen einfachen Zugriff haben.Dies kann dazu führen, dass Dateien, die eigentlich ausgeblendet werden sollten, nun auf den Client-Rechnern sichtbar werden.

Die Dateiberechtigungen variieren zwischen den beiden.Wenn Sie Dateien auf ein Unix-System kopieren, werden Sie wahrscheinlich feststellen, dass die Dateien jetzt dem Benutzer gehören, der das Kopieren durchgeführt hat, und über eingeschränkte Rechte verfügen.Sie müssen chown/chmod verwenden, um sicherzustellen, dass die richtigen Benutzer Zugriff darauf haben.

Es gibt Tools, die bei dem Problem helfen:

pauldoo

Wenn Sie sich nur für den Inhalt von Textdateien interessieren, dann sind die Zeilenenden ja unterschiedlich.Schauen Sie sich etwas wie dos2unix an, es könnte hier hilfreich sein.

Cheekysoft

Wie Pauldoo vorschlägt, können Tools wie dos2unix sehr nützlich sein.Beachten Sie, dass diese auf Ihrem Linux-/Unix-System möglicherweise als Fromdos oder Tofrodos oder möglicherweise sogar als Allzweck-Toolbox-Recode vorhanden sind.

Hilfe zur Java-Codierung

Cheekysoft

Beim Schreiben in Dateien oder beim Lesen aus Dateien (über die Sie die Kontrolle haben) lohnt es sich oft, die zu verwendende Kodierung anzugeben, da dies die meisten Java-Methoden zulassen.Allerdings kann auch die Sicherstellung, dass das Gebietsschema des Systems übereinstimmt, eine Menge Ärger ersparen

War es hilfreich?

Lösung

Dies ist nur ein Unterschied bei Textdateien, bei denen UNIX einen einzelnen Zeilenvorschub (LF) verwendet, um eine neue Zeile anzuzeigen, Windows einen Wagenrücklauf/Zeilenvorschub (CRLF) und Mac nur einen CR.

Bei Binärdateien sollte es keinen Unterschied geben (d. h.Ein JPEG auf einem Windows-Rechner ist Byte für Byte dasselbe wie dasselbe JPEG auf einem Unix-Rechner.)

Andere Tipps

Es könnte auch einen Unterschied in der Zeichenkodierung für nationale Zeichen geben.Es gibt keine „Unix-Kodierung“, aber viele Linux-Varianten verwenden UTF-8 als Standardkodierung.Mac OS (das auch ein Unix ist) verwendet eine eigene Kodierung (Macroman).Ich bin mir nicht sicher, welche Windows-Standardkodierung es ist.

Aber das könnte eine weitere Problemquelle sein (abgesehen von den unterschiedlichen Zeilenumbrüchen).

Was sind Ihre Probleme?Die Zeilenumbruchprobleme lassen sich leicht mit den Programmen dos2unix oder unix2dos auf dem Unix-Rechner beheben

Wenn Sie sich nur für den Inhalt von Textdateien interessieren, dann sind die Zeilenenden ja unterschiedlich.Schauen Sie sich so etwas an dos2unix, es könnte hier hilfreich sein.

(Natürlich gibt es noch viele andere Dinge, die Unix- und Windows-Dateien unterscheiden, aber ich glaube nicht, dass Sie im Moment an diesen anderen Unterschieden interessiert sind.)

Zusätzlich zu den gegebenen Antworten können Probleme mit den verschiedenen Dateisystemen auftreten:

  • Unter Unix sind Dateien, die mit a beginnen . sind versteckt.Unter Windows handelt es sich um ein Dateisystem-Flag, auf das Sie wahrscheinlich keinen einfachen Zugriff haben.Dies kann dazu führen, dass Dateien, die eigentlich ausgeblendet werden sollten, nun auf den Client-Rechnern sichtbar werden.

  • Die Dateiberechtigungen variieren zwischen den beiden.Wenn Sie Dateien auf ein Unix-System kopieren, werden Sie wahrscheinlich feststellen, dass die Dateien jetzt dem Benutzer gehören, der das Kopieren durchgeführt hat, und über eingeschränkte Rechte verfügen.Sie müssen verwenden chown/chmod um sicherzustellen, dass die richtigen Benutzer Zugriff darauf haben.

Zusätzlich zu den New-Line-Unterschieden ist die Byte-Reihenfolge-Markierung kann Probleme verursachen, wenn Dateien unter Windows als Unicode behandelt werden.

Wie Pauldoo vorschlägt, können Tools wie dos2unix sehr nützlich sein.Beachten Sie, dass sich diese möglicherweise auf Ihrem Linux-/Unix-System befinden fromdos oder Tofrodos, oder vielleicht sogar als Allzweck-Toolbox neu kodieren.

Eine weitere Reihe von Problemen, auf die Sie möglicherweise stoßen, kann jedoch mit Einzel-/Mehrbyte-Zeichenkodierungen zusammenhängen.Wenn Sie seltsame unerwartete Zeichen sehen (nicht am Zeilenende), könnte dies der Grund sein.Vor allem, wenn Sie quadratische Kästchen, Fragezeichen, auf dem Kopf stehende Fragezeichen, zusätzliche Zeichen oder unerwartete Akzentzeichen sehen.

Den Befehl ausführen Gebietsschema Auf Ihrer *nix-Box erfahren Sie, wie das Gebietsschema des Systems lautet.Wenn sich diese von der Kodierung unterscheidet, die in den vom Windows-Computer übertragenen Textdateien verwendet wird, kann dies je nach Verwendung dieser Dateien manchmal zu Problemen führen.Sie können das sehr Mächtige verwenden neu kodieren Befehl, um zu versuchen, zwischen den verschiedenen Zeichensätzen zu konvertieren und Probleme mit dem Zeilenende zu beheben. -l umkodieren zeigt Ihnen alle Formate und Kodierungen, zwischen denen das Tool konvertieren kann.Es dürfte eine SEHR lange Liste sein.

Beim Schreiben in Dateien oder beim Lesen aus Dateien (über die Sie die Kontrolle haben) lohnt es sich oft, die zu verwendende Kodierung anzugeben, da dies die meisten Java-Methoden zulassen.Allerdings kann auch die Sicherstellung, dass das Gebietsschema des Systems übereinstimmt, eine Menge Ärger ersparen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top