^M 字符处理
windows用的是\r\n来做分行的linux是\n
一、文本格式转换中的^M符号
-
跨平台文本文件:
- 当在Windows系统下编辑的文本文件被转移到Unix/Linux系统下打开时,由于Windows系统使用CR+LF(\r\n)作为行结束符,而Unix/Linux系统使用LF(\n)作为行结束符,因此可能会出现M这种特殊形式出现。
-
文本编辑器设置:
- 在某些文本编辑器(如Vim)中,如果编辑器被配置为识别Unix格式的文件,但打开的文件实际上是Dos格式的(即使用CR+LF作为行结束符),那么编辑器可能会将CR字符显示为^M。
二、历史和技术背景
-
打字机时代:
- 在计算机诞生之前,打字机使用两个字符来开始一个新行:首先是回车(CR),将打印头移回行首;然后是换行(LF),将纸张向上移动一行。这两个动作分别对应着\r和\n字符。
-
计算机存储:
- 在计算机存储成本高昂的年代,为了节省存储空间,一些系统(如MS-DOS和早期的Windows)选择了沿用打字机的回车换行传统,使用CR+LF作为行结束符。
-
编辑器识别:
- 现代文本编辑器(如Vim)通常能够识别并处理不同格式的行结束符。但是,如果编辑器的设置与文件的实际格式不匹配,就可能会出现^M这样的特殊表示。
三、解决方法
-
修改编辑器设置:
- 在Vim中,可以通过设置
fileformats
选项来指定编辑器能够自动识别的文件格式集合。例如,将fileformats
设置为unix,dos
,这样Vim就可以自动识别并处理Unix和Dos格式的文件了。
- 在Vim中,可以通过设置
-
使用转换工具:
- 可以使用如
dos2unix
这样的工具将Windows下的文本文件转换成符合Unix/Linux系统要求的文件。
- 可以使用如
-
手动替换:
- 在文本编辑器中,可以使用全局替换功能将^M符号(实际上是CR字符)替换掉。在Vim中,可以使用
:%s/\r//g
这样的命令来全局替换CR字符。
- 在文本编辑器中,可以使用全局替换功能将^M符号(实际上是CR字符)替换掉。在Vim中,可以使用
- dos2unix <文件名>
- 读取后做最后一个字符的值判断处理
综上所述,^M符号主要在跨平台文本文件传输和编辑器设置不匹配时生成。了解这一点有助于我们更好地处理文本文件中的行结束符问题。