CRLF 还是 LF
Windows 系统和类 UNIX 系统在处理换行符的时候有些差异:
- Windows 系统采用回车和换行两个字符来结束一行,即
\r\n
作为换行, 经常简称为CRLF
- 类 Unix 系统采用使用换行字符结束一行,即
\n
作为换行, 经常简称为LF
在过去, Mac OS 使用回车字符结束一行, 即
\r
, 简称为CR
, 但是现在最新的系统已经采用LF
作为换行, 与所有类 UNIX 系统保持一致
如果经常需要在 Windows 和 类 Unix 系统上切换工作或者与其他人在不同系统间协同工作, 这些差异往往就会扰乱你(们)的跨平台协作, 比如在进行读写文件后, 发现文件显示 ^M
这样的字符; 比如 git 提交的时候, 可能在提交记录里面会出现整个文件都被更改的局面…
以 CRLF 作为换行符的文本文件经常被称作 DOS 格式文件, 而以 LF 作为换行符文本文件, 被称作 UNIX 格式文件
CRLF 还是 LF
如果进行跨平台的协同工作, 特别是使用 git 进行代码版本管理, 最好统一换行符, 建议使用 LF
(即\n
) 作为换行符
使用 file
命令查看 dos 格式文件:
$ file dos_utf8_file.txt
dos_utf8_file.txt: UTF-8 Unicode text, with CRLF line terminators
使用 file
命令查看 unix 格式文件:
$ file unix_utf8_file.txt
unix_utf8_file.txt: UTF-8 Unicode text
dos 和 unix 的相互转换
dos 格式文件转换成 Unix 格式文件, 就是把 CRLF 替换为 LF; unix 格式文件转换成 dos 格式文件, 就是把 LF 替换为 CRLF
dos2unix 和 unix2dos
dos2unix
: dos 格式文件转换为 unix 格式文件
unix2dos
: unix 格式文件转换为 dos 格式文件
这是类 UNIX 系统上的两个命令, 如果没有安装, 请先安装
使用 nodejs 转换 CRLF 和 LF
function dos2unix (content) {
return content.split('\r\n').join('\n');
}
function unix2dos (content) {
let len = content.length;
let dos_content = '';
let lastChar = '', curChar;
for (let i=0; i<len; i++) {
curChar = content.charAt(i);
if (curChar === '\n' && lastChar !== '\r') {
dos_content += '\r';
}
dos_content += curChar;
lastChar = curChar;
}
return dos_content;
}
使用 git 转换 CRLF 和 LF
为了保持跨平台一致性, 最好保持行结束符一致, 因此推荐 Windows 设置
autocrlf
为true
, 类 UNIX 系统设置autocrlf
为input
-
Git 在提交代码时自动地把行结束符 CRLF 转换成 LF, 签出代码时候把行结束符转换为 CRLF:
git config core.autocrlf true
-
Git 在提交时把 CRLF 转换成 LF,签出时不转换:
git config core.autocrlf input
-
不进行任何转换(默认):
git config core.autocrlf false
- 上一篇: 使用 JavaScript 获取 DOM 元素位置和尺寸
- 下一篇: 使用最大余额法计算百分比