我正在读取一个ASCII文件从LINUX(Debian)到Python CGI脚本,它是通过网页编辑,然后保存。
如果我使用图形文本编辑器,编辑和未编辑的文件看起来是一样的,并且格式正确。
使用vi时,编辑后的文件包含ctrl M作为终止标记,所有行都合并为一行,但未编辑的文件格式正确。在vi中使用:set List查看控制字符已编辑的文件保持如上所述,但在未编辑的文件中,$显示为EOL标记。我知道LINUX EOL是ctrl 0x0D,但是$是什么呢?
为什么$的格式正确,而ctrl M的格式不正确?
发布于 2012-07-17 18:36:49
$由vi显示(在某些模式下)。它不在文件内容中。您可以使用od -cx yourfile检查这一点。
发布于 2012-07-17 22:45:32
在vi中,$与EOL字符匹配。您可以使用:set fileformat=XXX更改EOL字符,如here所示。我不是100%确定,如果你改变文件类型,$将匹配新的下线,因为我还没有尝试过。但该链接包含的信息将对答案的其余部分很方便。
^M或(CTRL-M)字符为roughly equivalent to a carriage return。
从你所说的,它听起来像是图形文本编辑器正在使用类似Mac的EOL,它只是一个没有换行符的回车(CR)。因此,^M字符和所有行合并为一行。如果它使用的是Windows/DOS,也就是回车符加换行符(CR+LF),我认为应该是^M字符,但每一行都在它自己的单独一行上。
This answer解释了如何去除^M字符。我不会使用dos2unix,因为我不确定它如何处理只有CR而没有CR+LF的情况。
https://stackoverflow.com/questions/11520713
复制相似问题