美文网首页编程语言爱好者
乱码(三)行尾的^M

乱码(三)行尾的^M

作者: aubell | 来源:发表于2020-03-23 14:46 被阅读0次

Windows下,文本文件的行尾有CR和LF两个字符。这两个字符的Ascii编码分别是0x0D和0x0A,也就是十进制下的13和10.

早些年的时候,Windows下创建的文件,在Linux下用Emacs打开,可以看到每行的行尾都有一个
^M
记号。

因为Linux下的文本行尾只有一个字符,0x0A,也就是十进制的10。那么,那个十进制的13就显示为^M了。

那么,为什么是^M呢?为了ascii码表的整齐。0被规定显示为^@,1对应^A,2对应^B,依次数下去,13就对应^M

现代的Emacs已经不显示这个^M了,而把文件自动识别为DOS格式。想要再现出^M来,还要费些周折。

但Windows下,c语言的putchar函数,有个特征可以再现:putchar(10),会输出两个字符,13 和 10。而getchar则会把这两个字符合并成一个。

那么,行尾究竟是哪一种好呢?这个问题还真不好说。如果说单纯的换行好的话,那么HTTP协议中分隔符却规定为0x0D,0x0A。Linux下用一个字符表示换行,很多编程方式都得到了简化,以至于处理二进制文件的方法和处理文本文件的方法基本相同。

使用 0x0D 0x0A 两个字符是尊重传统的方法,因为最早打印机打字的时候,回车表示倒回行首,换行表示进入下一行,这是两个动作。使用两个字符,遵循传统。

使用一个字符是创新的方法,简化设计。Mac系统据说在这个问题的选择上经历过变化,但一直只用一个字符。由于手头没有Mac电脑,不能实地观察了。

尊重传统和创新,一样都是极好的。

相关文章

  • 乱码(三)行尾的^M

    Windows下,文本文件的行尾有CR和LF两个字符。这两个字符的Ascii编码分别是0x0D和0x0A,也就是十...

  • 删除行尾^M

    问题 在df -hP输出结果到文本并用vim打开时发现,每行结尾都有一个^M。这个^M影响后续格式化流程 解决 如...

  • Emacs去掉行尾的^M

    之所以出现^M是因为文件中使用的是window下的换行符(\r\n)去掉方法,也就是替换成linux的换行符(\n)。

  • Intellij Idea乱码解决方案

    乱码场景使用Intellij Idea经常遇到乱码问题,可以总结为以下几类乱码的场景。 1、工程代码乱码。 2、m...

  • 正则表达式(二)

    “^”:匹配行首 "$":匹配行尾 "^M":匹配以大写“M”开头的行"n$":匹配以小写“n”结尾的行"^$":...

  • Linux删除命令

    :%s/[Ctrl-v][Enter]//g 删除DOS方式的回车^M :%s= *$== 删除行尾空白 :%!s...

  • VIM经典删除命令大全

    :%s/r//g 删除DOS方式的回车^M :%s= *$== 删除行尾空白 :%s/^(.*)n1/1$/ 删除...

  • VIM经典删除命令大全

    :%s/r//g 删除DOS方式的回车^M :%s=*$==删除行尾空白 :%s/^(.*)n1/1$/删除重复行...

  • 如何去掉文件中的^M符号

    在linux下执行一些windows文件时经常会遇到文件结尾是M的情况,这时就需要将文件行尾的M统统干掉。我从网上...

  • Mac上Mysql日常

    前言 最近一直在项目中遇到编码问题,mysql上是中文,到了页面就成乱码,反之,页面是中文,mysql上的乱码,m...

网友评论

    本文标题:乱码(三)行尾的^M

    本文链接:https://www.haomeiwen.com/subject/zulwyhtx.html