谈谈回车与换行,ANSI与UTF8

先来说说回车与换行,后面再谈谈ANSI编码和UTF8编码。

回车与换行

由一个问题说起,我在做一个项目的时候,用gdb调试,发现gdb执行和源码的行数不一致,排除了“-g -O0”编译优化的可能性后,因为看结果,gdb调试时候执行的顺序和源码固定差3行,就怀疑是否是windows和unix对回车和换行的处理不同导致的。后面验证了确实如此。

现在,就来说明这个事情。首先,我们要明确一点:我们提“回车”和“换行”不能脱离环境(比如是在windows环境下还是在unix环境下),脱离环境谈“回车”和“换行”是没有意义的
这里写图片描述
然后说明下:

  1. 1、当我们在windows环境下,在默认文本编辑器下(系统自带的记事本),当我们按下键盘上的“回车 **键**”时,输出的字符是0d 0a两个十六进制字符,即CR和LF。现象是:光标换行了。
  1. 2、当我们在unix环境下,在默认文本编辑器下(比如:vi),当我们按下键盘上的“回车 **键**”时,输出的字符是0a一个十六进制字符,即LF。现象也是:光标换行了。

因为CR和LF(0d和0a)不是显性的字符(即:看不出来),所以需要工具来显式地查看。推荐用notepad++(其他工具应该也可以的)。notepad++在“视图”->“显示符号”->“显示所有字符”,就可以把CR和LF都显示出来了。
这里写图片描述
验证上面的说法。
在windows下建立a.txt,用记事本打开,输入一些字段后,用notepad++打开查看。同样在linux下,建立b.txt,用vi打开,输入一些字段后,下载到windows下用notepad++打开查看。对比如下:
这里写图片描述
然后,为什么推荐notepad++这类工具呢?
因为它强大就强大在于可以模拟各种环境,可以是windows环境,也可以模拟linux环境,也可以模拟mac环境。如下:
这里写图片描述
拿上面那个例子,把a.txt转换为UNIX格式和MAC模式,如下:
这里写图片描述
可以看出当转变为UNIX格式,就变为LF(即:一个十六进制字符0a)结尾了,当转化为MAC模式,就变成CR(即:一个十六进制字符0d)结尾了。
总结下:
1、文档是windows格式,当我们按下键盘上的“回车键”时,输出的是CR和LF,即0d,0a两个字符。
2、文档是unix格式,当我们按下键盘上的“回车键”时,输出的LF,即0a一个字符。
3、文档是mac模式,当我们按下键盘上的“回车键”时,输出的是CR,即0d一个字符。
4、当通过工具(比如上面说的notepad++)或者命令(比如下面要说的vi的set命令)改变文档格式时,比如windows格式转换为unix格式,那么就是CR和LF替换为LF;再比如unix格式转换为mac格式,就是把LF替换为CR。

插入个题外话,在linux的vi下,也可以实现notepad++这个模拟环境的功能,就是用set ff命令。
vi下,冒号模式下(即:命令行模式)
输入set ff可以查看文档当前的格式;
输入set ff=dos,可以将文档变为windows格式;
输入set ff=unix,可以将文档变为unix格式;
输入set ff=mac,可以将文档变为mac格式。

现在回到本文最开始提到的那个gdb调试的问题,后面在notepad++下查看,就发现里面又有windows环境下的回车键(0d0a),又有unix环境下的回车键(0a),还有mac下的回车键(0d),十分的混乱(这应该是历史遗留问题,各个开发人员用的PC系统不同,提交代码时又没有进行适当的格式转换导致)。后来统一换成了unix格式后,问题解决。

ANSI与UTF8

ansi和utf8的问题又和上面说的回车换行格式问题完全是两码事了。
ansi和utf8主要是代码里的中文乱码问题(比如:中文注释 等等)
我的另一篇文章讲的比较详细,可以移步去看看。点击我

插个题外话,sourceinsight里,可以设置UTF8格式,这样显示中文应该可以。在Options->Preferences->Files中。
这里写图片描述
如果还是不行,那就把文件在noteapd++中打开,然后转换为UTF8格式。在编码->转为UTF-8编码。
这里写图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值