Unix和Windows文件之间的区别

20

我是否正确地认为,“Windows文件”和“Unix文件”的唯一区别是换行符?

我们有一个系统,已从Windows机器移动到Unix机器,遇到了格式问题。

在将文件交付给我们的“传输系统”之前,我需要自动化Unix / Windows之间的转换。 我可能需要某些工具来确定当前格式并将其转换为另一种格式。 如果唯一的差异是换行符,那么我考虑使用java.io读取文件。据我所知,它们能够处理两种格式的readLine。然后只需用

写回每行即可。
while (line = readline)
    print(line + NewlineInOtherFormat)
....

摘要:

samjudson:

这只是文本文件中的差异,UNIX使用单个换行符(LF)表示新行,Windows使用回车符/换行符(CRLF),而Mac仅使用CR。

对此,Cebjyre进一步解释说:

OS X使用LF,与UNIX相同。但MacOS 9及以下版本确实使用CR。

Mo

国际字符编码也可能存在差异。UNIX没有“unix-encoding”,但许多Linux变体使用UTF-8作为默认编码。 Mac OS(也是Unix)使用其自己的编码(macroman)。我不确定Windows的默认编码是什么。

McDowell

除了换行符差异外,在Windows上将文件视为Unicode时,字节顺序标记可能会导致问题。

Cheekysoft

但是,您可能会遇到一组与单字节/多字节字符编码相关的问题。如果看到奇怪的意外字符(不在行尾),那么可能是这个原因。特别是如果您看到正方形框,问号,倒置的问号,额外的字符或意外的重音字符。

Sadie

在Unix上,以.开头的文件被视为隐藏文件。在Windows上,这是一个文件系统标志,您可能无法轻松访问。这可能导致本应该隐藏的文件现在在客户机上变得可见。

两者之间的文件权限也有所不同。当您将文件复制到Unix系统上时,您可能会发现这些文件现在属于执行复制的用户并且具有有限的权限。您需要使用chown/chmod确保正确的用户可以访问它们。

存在帮助解决此问题的工具:

pauldoo

如果您只对文本文件的内容感兴趣,那么换行符不同。尝试使用dos2unix之类的工具,它可能对您有所帮助。

Cheekysoft

正如pauldoo建议的那样,像dos2unix这样的工具非常有用。请注意,这些工具在您的Linux / Unix系统上可能是fromdos或tofrodos,甚至作为通用工具箱recode。

Java编程帮助

Cheekysoft

在写入文件或从您控制的文件读取时,通常值得指定要使用的编码,因为大多数Java方法都允许这样做。但是,确保系统区域设置匹配也可以节省很多

6个回答

13

这只是文本文件中的差异,其中UNIX使用单个换行符(LF)表示新行,Windows使用回车符/换行符(CRLF),而Mac只使用CR。

对于二进制文件,它们应该没有区别(例如,Windows上的JPEG图像与Unix系统上的相同JPEG图像在每一个字节上都是相同的)。


4

对于国家字符,字符编码也可能存在差异。虽然没有“unix-encoding”,但是许多 Linux 变体使用 UTF-8 作为默认编码。Mac OS(也是 Unix 系统)使用自己的编码(macroman)。我不确定 Windows 的默认编码是什么。

除了不同的换行符之外,这可能是另一个麻烦的来源。

你有什么问题吗?与换行符相关的问题可以通过在 Unix 主机上使用 dos2unix 或 unix2dos 程序轻松地进行更正。


2
如果你只对文本文件的内容感兴趣,那么是的,行结尾是不同的。可以看看类似于dos2unix这样的东西,它可能会有所帮助。
(当然,Unix和Windows文件之间还有许多其他不同之处,但我认为你现在并不关心这些其他的差异。)

2
除了之前提到的答案,您可能会发现不同文件系统存在以下问题:
  • 在UNIX系统中,以“.”开头的文件是隐藏的。在Windows系统中,这是一个文件系统标志,您可能无法轻松访问。这可能导致原本应该隐藏的文件现在在客户机上变得可见。

  • 两种系统的文件权限也有所不同。当您将文件复制到UNIX系统时,您可能会发现这些文件现在属于进行复制的用户,并且具有受限的权限。您需要使用chown/chmod来确保正确的用户可以访问它们。


1

除了换行符的差异外,字节顺序标记 可能会在 Windows 上将文件视为 Unicode 时导致问题。


1

正如pauldoo所建议的那样,像dos2unix这样的工具非常有用。请注意,它们可能在您的Linux / Unix系统上作为fromdostofrodos,甚至作为通用工具箱recode

然而,您可能会遇到的另一组问题与单字节/多字节字符编码有关。如果您看到奇怪的意外字符(不在行尾),那么这可能是原因。特别是如果您看到正方形框、问号、倒置的问号、额外字符或意外重音字符等。

在*nix盒子上运行命令locale将告诉您系统语言环境是什么。如果这与从Windows机器传输过来的文本文件中使用的编码不同,则有时可能会导致问题,具体取决于这些文件的用途。您可以使用功能强大的recode命令尝试在不同字符集和任何行结束问题之间进行转换。recode -l将向您显示工具可以在其中转换的所有格式和编码。它可能是一个非常长的列表。

在编写文件或读取您控制的文件时,通常值得指定要使用的编码,因为大多数Java方法都允许这样做。但是,确保系统区域设置匹配也可以节省很多痛苦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接