文件以`^ M`接收

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

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

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

何时添加^M

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

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

谢谢:)

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

这是Windows和Unix之间的行尾不同。

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

[仍然像打字机一样使用物理电传打字终端时,“换行”字符的意思是“将纸张移至下一行”,“回车”字符的意思是“将滑架完全滑开。结束,所以打字头在最左边”。从一开始,几乎所有电传终端都支持隐式回车。也就是说,触发换行会自动触发回车。在Windows上使用祖先的开发人员决定,最好发送一个明确的回车符,以防万一(由于某种原因)电传打字机不会隐式执行。另一方面,Unix开发人员选择烘焙隐式回车作为标准的一部分。

您看到的“ ^ M”是“回车符”('\ r')字符。大多数“智能”文本编辑器默认情况下都会隐藏这些控制字符,但是某些命令行工具会在将文件内容转储到输出流时显示它们-这就是为什么在编辑文件或打印文件时看不到它们的原因(但它们仍然在那里!)。回车是一个ASCII Control Character,表示它没有作为独立字符的可见表示形式,并且您看到的“ ^ M”是替代形式的表示形式(其他控制字符具有以“ ^”开头的其他表示形式)。

您可以使用dos2unix将换行符从Windows样式转换为Unix样式。 (也有一个相反的包dos2unix。)

unix2dos

大多数用于Windows编码的“智能”文本编辑器(Sublime,Atom,VS Code,Notepad ++等)将以Unix风格的换行符愉快地读写(这可能需要更改某些配置选项)。甚至unix2dos的新版本都支持Unix风格的换行符。另一方面,如果使用Windows风格的换行符,某些Unix工具将产生奇怪的结果。如果您的代码库在Unix和Windows操作系统上都能被人们使用,那么最好的办法就是在所有地方使用Unix风格的换行符。

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

旁注(有趣,但与您的问题无关):

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

$ curl https://example.com/file_with_crlf.txt | dos2unix > file.txt
© www.soinside.com 2019 - 2024. All rights reserved.