代码之家  ›  专栏  ›  技术社区  ›  svrist

unix和windows文件之间的差异

  •  20
  • svrist  · 技术社区  · 17 年前

    我假设“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编码”,但许多linux变体使用UTF-8作为默认编码。Mac OS(也是unix)使用自己的编码(macroman)。我不确定windows的默认编码是什么。

    McDowell

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

    Cheekysoft

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

    Sadie

    在unix上,以.开头的文件。隐藏。在windows上,这是一个您可能不容易访问的文件系统标志。这可能会导致本应隐藏的文件现在在客户端机器上变得可见。

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

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

    pauldoo

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

    Cheekysoft

    正如pauldoo所建议的那样,dos2unix等工具可能非常有用。请注意,这些可能以fromdos或tofrodos的形式出现在您的linux/unix系统上,甚至可能以通用工具箱重新编码的形式出现。

    java编码帮助

    Cheekysoft

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

    6 回复  |  直到 6 年前
        1
  •  11
  •   samjudson    17 年前

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

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

        2
  •  4
  •   Mo.    17 年前

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

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

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

        3
  •  2
  •   pauldoo    17 年前

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

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

        4
  •  2
  •   Marcus Downing    17 年前

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

    • 在unix上,以a开头的文件 . 隐藏。在windows上,这是一个您可能不容易访问的文件系统标志。这可能会导致本应隐藏的文件现在在客户端机器上变得可见。

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

        5
  •  1
  •   McDowell rahul gupta    17 年前

    除了新的线路差异外 byte-order mark 如果文件在Windows上被视为Unicode,则可能会导致问题。

        6
  •  1
  •   Cheekysoft Moz Morris    17 年前

    正如pauldoo所建议的那样,dos2unix等工具可能非常有用。请注意,这些可能在您的linux/unix系统上作为 from dos 太妃糖 ,甚至可能作为通用工具箱 重新编码 .

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

    运行命令 场所 在*nix框中,会告诉您系统区域设置是什么。如果这与从windows计算机传输的文本文件中使用的编码不同,则根据这些文件的使用情况,这有时会导致问题。你可以使用非常强大的 重新编码 命令尝试在不同字符集之间进行转换以及处理任何行尾问题。 重新编码-l 将向您展示该工具可以转换的所有格式和编码。这可能是一个很长的清单。

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