我正在从LINUX(Debian)读取一个ASCII文件到Python CGI脚本,在那里通过网页编辑然后保存,
如果我使用图形文本编辑器,则编辑和未编辑的文件显示相同且格式正确。
使用vi编辑的文件包含ctrl M
作为EOL标记,所有行都合并为一行,但未编辑的文件格式正确。在vi中使用:set List
查看控制字符,编辑后的文件保持如上所述,但在未编辑的文件$
中显示为EOL标记。
我知道LINUX EOL是ctrl 0x0D但是什么是$
?
为什么$
格式正确且ctrl M
没有?
答案 0 :(得分:1)
$
由vi
显示(在某些模式下)。它不在文件内容中。您可以使用od -cx yourfile
来检查。
答案 1 :(得分:1)
在vi中,$
与EOL角色匹配。您可以使用:set fileformat=XXX
更改EOL字符,如here所示。我不是100%确定如果你改变文件类型,$
将匹配新的EOL,因为我还没有尝试过。但该链接包含的信息对于答案的其余部分将非常方便。
^M
或(CTRL-M)
字符为roughly equivalent to a carriage return。
从你的说法来看,听起来好像图形文本编辑器正在使用类似Mac的EOL,它只是一个没有换行符的回车符(CR)。因此^M
个字符和所有行汇总成一个。如果它是使用Windows / DOS EOL,它是回车加换行符(CR + LF),我会期望^M
字符,但它上面的每一行都是独立的。
This answer解释了如何摆脱^M
个字符。我不会使用dos2unix
,因为我不确定如何只处理CR而不是CR + LF。