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

我们的系统已从 Windows 计算机迁移到 UNIX 计算机,并且在格式方面遇到了问题。

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

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

概括:

萨姆朱德森:

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

到哪个 塞布伊尔 详细说明:

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 方法都允许这样做。然而,确保系统区域设置匹配可以减少很多麻烦

有帮助吗?

解决方案

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

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

其他提示

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

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

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

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

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

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

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

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

除了新线差异之外, 字节顺序标记 如果文件在 Windows 上被视为 Unicode,则可能会导致问题。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top