我是否正确地认为,“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没有“unix-encoding”,但许多Linux变体使用UTF-8作为默认编码。 Mac OS(也是Unix)使用其自己的编码(macroman)。我不确定Windows的默认编码是什么。
除了换行符差异外,在Windows上将文件视为Unicode时,字节顺序标记可能会导致问题。
但是,您可能会遇到一组与单字节/多字节字符编码相关的问题。如果看到奇怪的意外字符(不在行尾),那么可能是这个原因。特别是如果您看到正方形框,问号,倒置的问号,额外的字符或意外的重音字符。
在Unix上,以.开头的文件被视为隐藏文件。在Windows上,这是一个文件系统标志,您可能无法轻松访问。这可能导致本应该隐藏的文件现在在客户机上变得可见。
两者之间的文件权限也有所不同。当您将文件复制到Unix系统上时,您可能会发现这些文件现在属于执行复制的用户并且具有有限的权限。您需要使用chown/chmod确保正确的用户可以访问它们。
存在帮助解决此问题的工具:
如果您只对文本文件的内容感兴趣,那么换行符不同。尝试使用dos2unix之类的工具,它可能对您有所帮助。
正如pauldoo建议的那样,像dos2unix这样的工具非常有用。请注意,这些工具在您的Linux / Unix系统上可能是fromdos或tofrodos,甚至作为通用工具箱recode。
Java编程帮助
在写入文件或从您控制的文件读取时,通常值得指定要使用的编码,因为大多数Java方法都允许这样做。但是,确保系统区域设置匹配也可以节省很多