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工具~~~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值