为什么在查看某些文件时`M出现在终端输出中?

问题描述 投票:1回答:1

我正在使用node-red,并且正在尝试使用curl将文件发送到端点并将文件保存到计算机。从Linux发送curl并将其保存在计算机上效果很好,但是从Windows进行相同的卷曲将^M字符添加到行的每个结尾。

我正在保存文件之前正在打印文件,看不到^M。保存后仅在机器上查看文件会显示^M。因此,简单的字符串替换似乎不起作用。

何时添加^M

我希望文件的保存与从linux发送文件相同。

因此,我正在寻找节点红色级别的解决方案-应该将文件保存为已接收。

谢谢:)

javascript linux node-red
1个回答
3
投票

快速解答:这是carriage return。它们是Windows如何编码文本文件的无害但有轻微刺激性的工件。您可以使用dos2unix将它们从文件中删除。您可以将大多数文本编辑器配置为使用“ Unix线尾”或“ LF线尾”,以防止它们出现在将来从Windows PC创建的新文件中。


长回答(带有一些历史琐事):

在纯文本文件中,当您创建新行(通过按Enter / Enter键)时,在文件中嵌入了一个“换行符”。在Unix / Linux上,这是单个字符'\ n',即“换行符”。在Windows上,这是两个连续字符,“ \ r \ n”,“回车符”,后跟“换行符”。

[物理上类似于打字机的dos2unix仍在使用时,“换行”字符表示“将纸张移至下一行”,“回车”字符表示“将滑架全部滑因此打字头在最左边”。从一开始,几乎所有电传终端都支持隐式回车。也就是说,触发换行会自动触发回车。后来开发到Windows的开发人员决定,最好包括显式的回车符,以防万一(由于某种原因)电传打字机不能隐式执行。另一方面,Unix开发人员选择使用隐式回车的假设。

您看到的“ ^ M”是回车符。大多数“智能”文本编辑器默认情况下都会隐藏它们,但是某些命令行工具会在将文件内容转储到输出流时显示它们-这就是为什么在编辑文件或打印文件时看不到它们的原因(但它们仍然那里!)。

回车和换行符为teletype terminals,这意味着它们没有作为独立可打印字符的可见表示,而是它们影响输出光标本身(在这种情况下,将影响输出光标的位置)。您看到的“ ^ M”是一种不完整的表示形式,用于未完全“烹饪”其输出的程序(即,不应用某些ASCII控制字符的效果)。 (其他控制字符具有以“ ^”开头的其他表示形式,并且在某些ASCII Control Characters之类的Unix程序中,“ ^”字符还用于表示“ ctrl”键盘键。)

您可以使用nano将换行符从Windows样式转换为Unix样式。在某些发行版中,默认情况下包含此工具,而在其他发行版中,可以通过程序包管理器安装该工具(例如,在Ubuntu上,dos2unix)。还有一个用于反函数的包dos2unix

sudo apt install dos2unix

大多数用于编码(Sublime,Atom,VS Code,Notepad ++等)的“智能”文本编辑器将愉快地使用Windows样式或Unix样式的行尾进行读写(这可能需要更改某些配置选项)。通常,通过扫描文件的内容来自动检测行尾,并且通常使用操作系统的本机行尾创建新文件(默认情况下)。甚至unix2dos的新版本都支持Unix样式的行尾。另一方面,如果使用Windows风格的换行符,某些Unix工具将产生奇怪的结果。如果您的代码库在Unix和Windows操作系统上都能被人们使用,那么最好的办法就是在所有地方使用Unix风格的换行符。

Windows上的Git也具有可选模式,该模式检出所有具有Windows样式换行符的文件,但通过Unix样式换行符将它们检回。


旁注(有趣,但与您的问题没有直接关系:]

回车符实际执行的操作(在现代的虚拟终端上,无论是Windows还是Unix)是将输出光标移动到行首。如果使用不带换行符的回车符,则可以“覆盖”已经打印的字符串的一部分。

unix2dos

某些Unix程序使用它来异步更新输出的最后一行,以实现实时更新进度指示器之类的功能。例如,$ curl https://example.com/file_with_crlf.txt | dos2unix > file.txt ,如果文件内容以管道传输到其他位置,则它将显示stdout上的下载进度。

[另外:如果您有一个工具可以尽可能地从字面上解释Windows样式的行尾,并且以Unix样式的行尾(例如“ hello \ nworld”)喂它一个字符串,您将得到如下输出:

Notepad

幸运的是,这种实现很少见,通常,大多数Windows工具可以毫无问题地呈现Unix样式的行尾与Windows样式的行尾。

© www.soinside.com 2019 - 2024. All rights reserved.