Linux - 文本文件中的字符^M如何处理

 

经常在Linux或Unix下进行嵌入式软件开发,使用Yocto、交叉编译工具链等。
但对于源码的编辑,还常常是在Windows平台下,比如我就用的Samba服务将Linux的源代码共享,然后Windows下访问来编辑。
这样有时就会出现文件格式的冲突,因为Windows的文本文件每行的结尾是Windows Line Ending(CR/LF) ,回车换行, \r\n,Carriage Return / Line Feed,十六进制0x0D 0x0A,符号表示为^M ^J。
Unix Line Ending是LF,Mac pre-OS X Line Ending是CR。
这样就会一不小心出现问题,Windows的文件格式带入了Linux系统。
然后,Git提交代码,这一行发生变动的代码的结尾就会出现^M符号,这个就是多出来的那个回车符。
不影响编译和查看,但终归还是有些瑕疵。
这时可以使用Linux下的dos2unix和unix2dos这两个命令来转换。如果没有需要apt安装一下。
$ sudo apt install dos2unix
$ dos2unix main.cpp

或者使用vim, 也可以实现这个功能,使用vi或vim打开这个文件后,执行命令:
:set ff=unix
:w

------------------------------ 

验证测试:

我们创建并编辑一个Windows下的文本文件,文件内容如下:

文件windows.txt

hello123

45678

999

使用Notepad++打开这个文件,然后切换到hex显示模式( 安装Hex Editor Plugin 😞

我们发现每行结束符是两个字节,0x0D 0x0A。

然后将此文件copy到Ubuntu中,操作如下,可以看到0x0D 0x0A转换成了一个字节0x0A。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值