换行符\r \n LF

前言:在对照PSR-2规范时,看到文件结尾必须要以Unix LF(linefeed)结尾,不懂查~

来源于:http://www.cppblog.com/prayer/archive/2009/08/19/93854.html

 

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即"\n";

Windows系统里面,每行结尾是“<换行><回车 >”,即“\n\r”;

Mac系统里,每行结尾是“<回车>”,即"\r"。

一个直接后果是,Unix/Mac系统下的文件在 Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号(vi时有见过这个标识,奈何当时不懂~)


在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.
Dos和windows采用回车+换行CR/LF表示下一行, 
而UNIX/Linux采用换行符LF表示下一行,
苹果机(MAC OS系统)则采用回车符CR表示下一行.
CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D; 
LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A.
所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.
一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件.
在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错.
很多文本/代码编辑器带有换行符转换功能, 使用这个功能可以将文本文件中的换行符在不同格式单互换.
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化. 如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本. 

### 检查文件换行符是否为LF格式的方法 #### 使用文本编辑器或IDE 许多现代文本编辑器和IDE(如VS Code、PyCharm、IntelliJ IDEA等)都支持查看和修改文件的换行符格式。通常可以在状态栏或文件属性中找到相关信息。 - 在 **VS Code** 中,右下角的状态栏会显示当前文件的换行符格式(如`CRLF`或`LF`)。点击该区域可以选择并更改为`LF`格式。 - 在 **PyCharm** 或 **IntelliJ IDEA** 中,可以通过 `File -> File Properties -> Line Separators` 查看当前文件的换行符类型,并选择`LF - Unix and macOS(\n)`进行更改 [^3]。 #### 使用命令行工具 对于熟悉命令行的用户,可以使用以下工具检查文件的换行符: - **`file` 命令**(适用于Linux和macOS) ```bash file filename.txt ``` 如果输出中包含 `CRLF`,则表示文件使用的是Windows风格的换行符;如果只显示 `ASCII text`,则通常表示使用的是LF格式 [^2]。 - **`cat -A` 命令**(适用于Linux和macOS) ```bash cat -A filename.txt ``` 该命令会显示文件中的所有不可见字符。`LF`换行符会显示为 `$` 符号,而`CRLF`会显示为 `^M$` [^2]。 - **`dos2unix` 工具** `dos2unix` 是一个专门用于转换Windows和Unix换行符的工具。它也可以用来检查文件的换行符类型: ```bash dos2unix -i filename.txt ``` 如果输出显示 `CRLF`,则表示文件使用的是Windows换行符;如果显示 `LF`,则表示已经是Unix风格 [^2]。 #### 使用Python脚本检查 如果希望通过编程方式检查文件的换行符,可以使用以下Python脚本: ```python def check_line_endings(file_path): with open(file_path, 'rb') as f: content = f.read() if b'\r\n' in content: print("文件使用的是CRLF换行符(Windows格式)") elif b'\n' in content: print("文件使用的是LF换行符(Unix/Linux格式)") else: print("无法确定文件的换行符格式") # 示例调用 check_line_endings('example.txt') ``` 这段代码通过读取文件的二进制内容,检查是否存在`CRLF`(`\r\n`)或`LF`(`\n`)来判断换行符类型 。 #### 使用Git检查 如果你正在使用Git进行版本控制,可以通过以下方式检查文件的换行符: - 在 `.gitattributes` 文件中设置 `text=auto`,Git会自动处理换行符转换。 - 使用 `git config core.autocrlf true`(Windows)或 `git config core.autocrlf input`(Linux/macOS),Git会在提交时自动将CRLF转换为LF 。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值