我是否正确假设“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 方法都允许这样做。但是,同时确保系统区域设置匹配也可以省去很多麻烦