unix和windows文件之间的差异

时间:2008-08-20 09:18:45

标签: java windows unix file

我是否认为“windows files”和“unix files”之间的唯一区别是换行?

我们的系统已从Windows机器移动到unix机器,并且格式有问题。

我需要在文件传送到“transportsystem”系统之前自动执行unix / windows之间的转换。我可能需要一些东西来确定当前的格式以及将其转换为其他格式的东西。 如果它只是新行有很大的不同,那么我正在考虑用java.io读取文件。据我所知,他们可以使用readLine处理这两个问题。然后用

写回每一行
while (line = readline)
    print(line + NewlineInOtherFormat)
....

要点:

  

samjudson

     
    

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

  
     

Cebjyre阐述的内容:

     
    

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

  
     

Mo

     
    

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

  
     

McDowell

     
    

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

  
     

Cheekysoft

     
    

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

  
     

Sadie

     
    

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

         

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

  

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

  

pauldoo

     
    

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

  
     

Cheekysoft

     
    

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

  

java编码帮助

  

Cheekysoft

     
    

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

  

6 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

除了新行差异之外,如果在Windows上将文件视为Unicode,byte-order mark可能会导致问题。

答案 5 :(得分:1)

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

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

在* nix框中运行命令 locale 将告诉您系统区域设置是什么。如果这与从Windows计算机传输的文本文件中使用的编码不同,则这有时会导致问题,具体取决于这些文件的用法。您可以使用非常强大的重新编码命令尝试在不同的字符集之间进行转换以及任何行结束问题。 recode -l <​​/ strong>会显示该工具可以转换的所有格式和编码。它可能是一个非常长的列表。

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