我是否正确地认为“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
莫
国家字符的字符编码也可能有所不同。 没有“unix编码”,但许多linux变体使用UTF-8作为默认编码。 Mac OS(也是unix)使用自己的编码(macroman)。 我不知道,默认的编码是什么窗口。
麦克道尔
除了换行符之外,如果在Windows上将文件视为Unicode,则字节顺序标记可能会导致问题。
Cheekysoft
但是,您可能遇到的另一组问题可能与单/多字节字符编码有关。 如果你看到奇怪的意外字符(不在行尾),那么这可能是原因。 特别是如果您看到方框,问号,颠倒的问号,多余的字符或意外的重音字符。
塞迪
在unix上,以。开头的文件。 被隐藏。 在Windows上,这是一个文件系统的标志,你可能不容易访问。 这可能会导致应该隐藏的文件现在在客户端机器上可见。
两者之间的文件权限不尽相同。 您可能会发现,当您将文件复制到unix系统时,这些文件现在属于执行复制的用户并且权限有限。 你需要使用chown / chmod来确保正确的用户有权访问它们。
有一些工具可以帮助解决这个问题:
pauldoo
如果你只是对文本文件的内容感兴趣,那么行结尾是不同的。 看看像dos2unix,这可能是在这里的帮助。
Cheekysoft
正如pauldoo所build议的,像dos2unix这样的工具可能非常有用。 请注意,这些可能在您的linux / unix系统上是fromdos或tofrodos,或者甚至可能是通用工具箱重新编码。
帮助Java编码
Cheekysoft
当写入文件或从文件中读取(您可以控制)时,通常值得指定要使用的编码,因为大多数Java方法都允许使用这种编码。 但是,也要确保系统区域匹配可以节省很多痛苦
这只是文本文件的不同之处,UNIX使用单个换行(LF)来表示新行,Windows使用回车/换行(CRLF),而Mac仅使用CR。
二进制文件应该没有区别(即在Windows机器上的JPEG将是字节的字节与在unix框上相同的JPEG相同)。
国家字符的字符编码也可能有所不同。 没有“unix编码”,但许多linux变体使用UTF-8作为默认编码。 Mac OS(也是unix)使用自己的编码(macroman)。 我不知道,默认的编码是什么窗口。
但是这可能是另一个麻烦来源(除了不同的换行符之外)。
你有什么问题? 与linebreak相关的问题可以通过unix-machine上的dos2unix或unix2dos程序轻松解决
如果你只是对文本文件的内容感兴趣,那么行结尾是不同的。 看看像dos2unix ,这可能是在这里的帮助。
(当然还有很多其他的东西让unix和windows文件有所不同,但我不认为你现在对这些其他的区别感兴趣。)
除了给出的答案之外,您可能会发现不同文件系统的问题:
在unix上,以。开头的文件。 被隐藏。 在Windows上,这是一个文件系统的标志,你可能不容易访问。 这可能会导致应该隐藏的文件现在在客户端机器上可见。
两者之间的文件权限不尽相同。 您可能会发现,当您将文件复制到unix系统时,这些文件现在属于执行复制的用户并且权限有限。 你需要使用chown / chmod来确保正确的用户有权访问它们。
除了换行符之外,如果在Windows上将文件视为Unicode,则字节顺序标记可能会导致问题。
正如pauldoo所建议的,像dos2unix这样的工具可能非常有用。 请注意,这些可能在您的linux / unix系统上是fromdos或tofrodos ,或者甚至可能是通用工具箱重新编码 。
但是,您可能遇到的另一组问题可能与单/多字节字符编码有关。 如果你看到奇怪的意外字符(不在行尾),那么这可能是原因。 特别是如果您看到方框,问号,颠倒的问号,多余的字符或意外的重音字符。
在* nix框中运行命令语言环境会告诉你系统区域设置是什么。 如果这与从Windows机器传输过来的文本文件中使用的编码不同,则这有时会导致问题,这取决于这些文件的用法。 您可以使用非常强大的recode命令尝试在不同的字符集之间进行转换以及任何行结束问题。 recode -l会显示工具之间可以转换的所有格式和编码。 这可能是一个很长的名单。
当写入文件或从文件中读取(您可以控制)时,通常值得指定要使用的编码,因为大多数Java方法都允许使用这种编码。 但是,也要确保系统区域匹配可以节省很多痛苦。