Windows下生成的每行文本文件末尾的“ ^ M”


10

我想知道为什么如果您打开在Windows记事本下的UNIX下创建的文本文件,您会发现它在^M哪里应该有新行?

我的理解是,在Windows中,每一行与结束\r\n,即 0x0D0A在ASCII,同时^M具有ASCII值0x5E4D。我不能将两者从一个联系到另一个。


在Windows中,您可以使用更好的编辑器,例如Notepad ++。它将允许您保存带有UNIX行尾的文件,但可以在Windows中查看它,就好像它具有Windows行尾。然后,您可以在两个OS中正常查看它。
凯文”

Answers:


19

您认为行尾很重要,这是正确的;两种操作系统都希望该行以“ \ n”结尾,但是Windows也在unix所不希望的之前添加了“ \ r”,因此unix程序将以自己的方式输出“ \ r”。

该文件实际上并没有以两个字符“ ^”和“ M”结尾,这只是表示不可打印字符的一种常用方式。程序将输出“ ^”和一个与字节值相对应的字母,从A开头为1。M是第13个字母,“ \ r”是ASCII代码13(如您所说,为0xD),因此您看到“ ^ M“


2
这也是Ctrl-M的简写,这是您通过键盘获取该字符的方式。
史蒂文·普里查德

7
您可以使用命令行实用程序dos2unixunix2dos在格式之间转换文本文件。
克里斯·纳瓦

1
@Chris True,但与这个问题没有任何关系
Michael Mrozek

谢谢!(1)我想知道哪种程序将以这种方式输出不可打印的字符?例如,所有文本编辑器/查看器是否都以这种方式工作?(2)用哪种方式处理无法打印的字符,而不用哪种类型?例如,为什么不文本查看器输出^J\n
蒂姆(Tim)

1
^ M表示要比GUI文本编辑器早几年(甚至数十年)。
克里斯·纳瓦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.