admin管理员组文章数量:1794759
Linux和Windows文件编码格式区别
1.业务场景
需要从Linux服务器向Windows PC机发送/抓取文本。Linux通过访问安装在windows PC上的ftp server的共享目录实现文件的读写。
2.发现问题
因需要保证文件的完整性和一致性,我们对文本添加MD5校验码,并将MD5码一并发送到目标机器。结果发现linux服务器上对文本生成的MD5码与windows pc上对文本生成的MD5码不一致。
3.寻找答案
DOS终结符-CR/LF
UNIX终结符-LF MAC终结符-CR unix文本文件和windows/dos文本文件的格式区别主要是两点: 换行符: unix(/n) windows/dos(/r/n) Ctrl: ^J ^M^J Dec: 10 13+10 Hex: 0A 0D+0A Code: LF CR+LF 文件结束符: unix windows/dos Ctrl: ^D ^Z Dec: 04 26 Hex: 04 1A ftp工具可以选择以文本或者二进制格式传输, ASCII模式和Binary模式的区别是回车换行的处理,Binary模式不对数据进行任何处理,ASCII模式将回车换行转换为本机的回车字符,比如:UNIX下是\\n,Windows下是\\r\\n,Mac下是\\r。 So, 真相大白了。linux服务器上的文件是unix文本文件,以\\n作为换行符,此刻生成MD5吗是对unix文本文件生成的校验码。unix文本文件在通过FTP 以 ASCII模式传输到windows PC后,转换成了以\\r\\n为换行符的dos(或称作pc)编码文本文件。这时在对这个文件生成MD5校验码必定和之前在linux上生成的MD5校验码不一致~~~罪魁祸首就是不同操作系统对终结符有不同的编码方式。4.解决方式
Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把"\\r\\n"转化成"\\n",unixtodos把"\\n"转化成"\\r\\n"。Java程序中,使用 Runtime.getRuntime().exec("unix2dos "+ fileName);来实现对文本格式互转命令的调用。多说一句,执行指令前要先看看linux上是否有安装unix2dos/dos2unix工具~~~版权声明:本文标题:Linux和Windows文件编码格式区别 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686878004a113833.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论