19

我是否正确假设“windows 文件”和“unix 文件”之间的唯一区别是换行符?

我们有一个系统已从 windows 机器转移到 unix 机器,并且在格式上遇到了问题。

在文件被传递到我们的“传输系统”中的系统之前,我需要在 unix/windows 之间自动进行转换。我可能需要一些东西来确定当前格式以及将其转换为其他格式的东西。如果只是换行符就是最大的不同,那么我正在考虑使用 java.io 读取文件。据我所知,他们能够使用 readLine 处理这两种情况。然后只需将每一行写回

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

概括:

萨姆朱德森

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

Cebjyre详细说明:

OS X 使用 LF,与 UNIX 相同 - MacOS 9 及更低版本确实使用 CR

国家字符的字符编码也可能有所不同。没有“unix 编码”,但许多 linux 变体使用 UTF-8 作为默认编码。Mac OS(也是一个 unix)使用自己的编码(macroman)。我不确定,windows默认编码是什么。

麦克道威尔

除了换行符之外,如果文件在 Windows 上被视为 Unicode,字节顺序标记可能会导致问题。

厚脸皮

但是,您可能遇到的另一组问题可能与单/多字节字符编码有关。如果您看到奇怪的意外字符(不在行尾),那么这可能是原因。尤其是当您看到方框、问号、倒置问号、多余字符或意外重音字符时。

萨迪

在 unix 上,以 . 被隐藏。在 Windows 上,它是您可能无法轻松访问的文件系统标志。这可能会导致本应隐藏的文件现在在客户端计算机上变得可见。

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

有一些工具可以帮助解决这个问题:

保罗杜

如果您只是对文本文件的内容感兴趣,那么是的,行尾是不同的。看看 dos2unix 之类的东西,它可能对这里有帮助。

厚脸皮

正如 pauldoo 所建议的,像 dos2unix 这样的工具非常有用。请注意,这些可能在您的 linux/unix 系统上作为 fromdos 或 tofrodos,或者甚至作为通用工具箱重新编码。

java编码帮助

厚脸皮

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

4

6 回答 6

13

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

二进制文件应该没有区别(即 Windows 机器上的 JPEG 将逐字节地与 unix 机器上的相同 JPEG 相同。)

于 2008-08-20T09:22:07.477 回答
4

国家字符的字符编码也可能有所不同。没有“unix 编码”,但许多 linux 变体使用 UTF-8 作为默认编码。Mac OS(也是一个 unix)使用自己的编码(macroman)。我不确定,windows默认编码是什么。

但这可能是另一个麻烦来源(除了不同的换行符)。

你有什么问题?与换行有关的问题可以通过 unix 机器上的程序 dos2unix 或 unix2dos 轻松纠正

于 2008-08-20T09:22:15.743 回答
2

如果您只是对文本文件的内容感兴趣,那么是的,行尾是不同的。看看类似dos2unix的东西,它可能对这里有帮助。

(当然,还有许多其他因素使 unix 和 windows 文件不同,但我认为您现在对这些其他差异不感兴趣。)

于 2008-08-20T09:23:29.517 回答
2

除了给出的答案之外,您可能会发现不同文件系统的问题:

  • 在 unix 上,以. 被隐藏。在 Windows 上,它是您可能无法轻松访问的文件系统标志。这可能会导致本应隐藏的文件现在在客户端计算机上变得可见。

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

于 2008-08-20T09:42:10.190 回答
1

除了换行符之外,如果文件在 Windows 上被视为 Unicode ,字节顺序标记可能会导致问题。

于 2008-08-20T09:28:41.487 回答
1

正如 pauldoo 所建议的,像 dos2unix 这样的工具非常有用。请注意,这些可能在您的 linux/unix 系统上作为fromdostofrodos,或者甚至作为通用工具箱recode

但是,您可能遇到的另一组问题可能与单/多字节字符编码有关。如果您看到奇怪的意外字符(不在行尾),那么这可能是原因。尤其是当您看到方框、问号、倒置问号、多余字符或意外重音字符时。

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

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

于 2008-08-20T09:40:26.497 回答