换行符转换

换行符转换是一个免费在线工具:把文本文件的换行符在 Windows 的 CRLF、Linux/macOS 的 LF 和老 Mac 的 CR 之间一键互转,并先告诉你文件现在用的是哪种、有没有混用、混在第几行。它只改换行字节,不重新编码,GBK 文件转完仍是 GBK,BOM 原样保留。支持 50 个文件批量转换打包下载,全程在浏览器本地完成,文件不上传。

一键预设
转换为
把文本文件拖到这里,或点击选择(可多选,最多 50 个)
文件不上传 · 浏览器本地处理 · 一次最多 50 个 · 单文件 ≤20 MB

如何使用换行符转换

1

把文本文件拖进来或点击选择(.sh、.py、.bat、.csv、.srt、.json、.env 等都行,不限扩展名,一次最多 50 个、单个不超过 20 MB),每个文件马上显示它是 LF、CRLF、CR 还是混用,各有多少处、混用的在第几行。

2

选目标换行:用一键预设「Linux / Git 规范」(转 LF 并补末尾换行)、「Windows 记事本 / Excel」(转 CRLF)或「只换行尾」,也可以单独调末尾换行与 Unicode 行分隔符;结果表会写清每个文件改了什么。

3

下载:单个文件保持原文件名下载,可以直接覆盖原文件;多个文件点「全部打包下载」得到一个 zip,已经符合要求的文件也按原样放进包里,方便整体替换。

关于换行符转换的常见问题

换行符转换会上传我的文件吗
不会。检测和转换全部在浏览器本地完成,文件不发送到任何服务器,关闭页面即清除。本页只在本机记住你选的预设、目标换行和末尾换行设置,不保存任何文件内容;可以打开开发者工具的「网络」面板走一遍验证,也可以断网后照常使用。
换行符 CRLF 和 LF 有什么区别
LF 是一个字节 0A(写作 \n),Linux、macOS 和 Git 仓库用它;CRLF 是两个字节 0D 0A(写作 \r\n),Windows 用它;CR 是 0D(写作 \r),只有 2001 年以前的老式 Mac 用。三者在屏幕上看起来一样,都是「换到下一行」,但很多程序只认其中一种:Shell 脚本和 Git 要 LF,批处理文件和部分老版记事本要 CRLF。
怎么看一个文件用的是 CRLF 还是 LF
把文件拖进本页,马上显示它是 LF、CRLF、CR 还是混用,各有多少处、混用的少数派在第几行,以及末尾有没有换行。点「预览」能看到前 200 行,每行末尾标出 CRLF / LF / CR 徽标,少数派的行会整行高亮。编辑器里也能看:VS Code 状态栏右下角显示 CRLF 或 LF,Notepad++ 在「视图 → 显示符号 → 显示行尾符」。
脚本报 /bin/bash^M 怎么转换换行符
「/bin/bash^M: bad interpreter: No such file or directory」说明这个 Shell 脚本是在 Windows 上编辑的,每行末尾是 CRLF,^M 就是多出来的那个 CR 字节,系统把它当成了解释器路径的一部分。把脚本拖进本页,选「Linux / Git 规范」转成 LF,重新上传到服务器即可。本页检测到首行是 #! 的脚本带 CRLF 时会直接提示。
转换换行符会不会把中文变成乱码
不会。本工具只改换行字节、不重新编码:GBK 文件转完还是 GBK,UTF-8 的 BOM 原样保留,除了换行,一个字节都不动。原理是换行字节 0D、0A 在 UTF-8、GBK、Big5 里都不会出现在汉字中间,所以不用把文件读成文字再存回去。如果文件本来打开就是乱码,那是编码问题,不是换行符的问题,请用「文本文件编码转换」。
Git 提示 LF 替换成 CRLF 怎么办
「warning: LF will be replaced by CRLF」是因为你开着 core.autocrlf=true,Git 会在检出时把 LF 换成 CRLF、提交时再换回来,这只是提醒,不是报错。想彻底统一,推荐在仓库根目录加 .gitattributes(如 * text=auto eol=lf),再执行 git add --renormalize . 让已有文件按规则重新登记,而不是逐个手动转换。
Git diff 整个文件变红是换行符问题吗
多半是。如果 diff 里每一行都显示删除又添加、但内容看起来一模一样,就是换行符从 LF 变成了 CRLF(或反过来),每一行的结尾都变了。把文件拖进本页看检测结果,转回仓库原来的风格再提交即可;也可以用「文本对比」工具确认除了换行没有别的差异。
文件里换行符混用了怎么办
本页会告诉你主要是哪种、少数派有多少处、在第几行(最多列 20 个行号,再多写「等共 N 处」)。选一种目标转换后全文统一。注意混用的文件转换之后,「哪些行原来是哪种」的信息就没有了,不能再还原成原来的混用状态,转之前先看一眼检测结果。
文件末尾要不要留一个换行符
Linux 工具和 Git 习惯文件以换行结尾:没有时 git diff 会显示「No newline at end of file」,cat 多个文件时最后一行会和下一个文件粘在一起。默认的「Linux / Git 规范」预设会在末尾没有换行时补一个;选「只换行尾」则保持原样;也可以选「去掉末尾换行」,连同末尾的空行一起删掉。
UTF-16 编码的文件能转换换行符吗
能。带 BOM 的 UTF-16 会按两个字节一组处理,不会误伤字节恰好是 0D 0A 的字符;没有 BOM 的会根据字节分布推断,并在结果里标明「推断」。转换后仍是 UTF-16,BOM 保留。UTF-32 暂不支持,会被跳过并说明原因。
能一次批量转换多个文件的换行符吗
能,一次最多 50 个文件,单个不超过 20 MB、合计不超过 200 MB。可以逐个下载,也可以打包成「换行符转换-LF.zip」这样的压缩包;已经符合要求的文件会原样放进包里,方便整体覆盖,同名文件自动加 (2) 后缀。以点开头的文件名(如 .env)单独下载时浏览器可能会改名,下载后改回即可。
为什么粘贴文本检测不到原来的换行符
因为网页标准规定:浏览器的文本框会把所有换行统一成 LF,你粘进来的 CRLF 文本,网页拿到时已经是 LF 了,根本看不到原样。所以检测只在上传文件时做;「粘贴文本」模式只用来按你选的换行生成 .txt 文件。复制到剪贴板后换行最终是什么由粘贴的目标程序决定,要精确控制请下载文件。
U+2028 行分隔符要不要转成换行符
U+2028 是 Unicode 的「行分隔符」(另有 U+2029 段分隔符、U+0085 下一行),常混在从网页或 Word 复制的文字里:有的编辑器显示为换行、有的完全看不见,放进 JSON 或老版 JavaScript 字符串里还会出错。勾选「把 Unicode 行分隔符也换成目标换行」即可把它们换成普通换行;只对 UTF-8 / UTF-16 文件生效。
在线换行符转换免费吗,有次数限制吗
完全免费,不用注册登录,也不限使用次数。唯一的限制来自浏览器内存:一次最多 50 个文件、单个不超过 20 MB。超过就分几批处理;日常的脚本、配置文件、CSV 和字幕远小于这个上限。

CRLF、LF、CR 三种换行符分别是什么

换行符是文本文件里标记「这一行结束了」的看不见的字节。它的名字来自打字机:回车(Carriage Return,CR)把字车推回行首,换行(Line Feed,LF)把纸往上卷一行。Windows 沿用了「回车 + 换行」两个动作,Unix 只留了换行,老式 Mac 只留了回车,于是有了三种写法。

三种换行符的字节、写法与使用的系统
名称字节(十六进制)转义写法来自哪个系统哪些程序要求它
LF0A\nLinux、macOS、Android、Git 仓库Shell 脚本、Python 脚本、Git 仓库、Docker、Nginx 等服务器配置
CRLF0D 0A\r\nWindows、DOS.bat / .cmd 批处理、部分老版记事本、某些 Excel 与 Windows 老程序的导入
CR0D\r2001 年以前的老式 Mac OS现在几乎没人用,偶见于很老的 Mac 文件(Mac换行符CR)

UTF-16 文件里每个字符占两个字节,所以 LF 存成 0A 00(小端)或 00 0A(大端),CRLF 是四个字节。本工具按文件的实际编码写回同样宽度的换行,不会把 UTF-16 文件写坏。

一个可以自己核对的算例:一份 UTF-8 文件有 1000 处 CRLF,CRLF转LF 后每处少一个 0D,文件正好变小 1000 字节;反过来 LF转CRLF 就大 1000 字节。UTF-16 文件每处差 2 字节。如果同时选了「末尾没有就补一个」,再多出一个换行的字节数。没勾 Unicode 行分隔符选项时,转换后的大小和这个数对不上,就说明除了换行还有别的东西被改了。

换行符格式不对会导致哪些报错

常见报错与原因
现象 / 报错原因怎么改
/bin/bash^M: bad interpreter脚本是 CRLF,首行 #! 后面多了一个 CR(^M)转 LF
$'\r': command not foundShell 把每行末尾的 CR 当成命令的一部分转 LF
Docker 启动脚本报 exec format error 或 no such file or directoryentrypoint 脚本是 CRLF,解释器路径带了 CR转 LF
Python 脚本 ./run.py 直接执行失败同样是 shebang 行带 CR,Python 本身能读 CRLF转 LF
Git diff 整个文件都变了提交前后换行风格不同,每一行的结尾都变了转回仓库原来的风格
No newline at end of file文件最后一行没有换行末尾换行选「末尾没有就补一个」
老版记事本打开文件不换行,全挤在一行文件是 LF,Windows 10 1809 版以前的记事本只认 CRLF转 CRLF
CSV 用 Excel 打开多出空行或单元格断开换行混用,或单元格内有孤立的 CR先看检测结果,再统一成 CRLF

shell脚本在Windows编辑后不能运行,十有八九就是上面前三种:脚本文本本身没错,只是每行多了一个看不见的 CR。本页对首行是 #! 的脚本文件做了专门检查,带 CRLF 时会直接提示;对 .bat / .cmd 批处理文件则反过来,用 LF 时提示转 CRLF——bat文件换行符用 LF,在部分 Windows 下 goto 和 call 跳转标签会跳错行。

转换换行符为什么不会改变文件编码

很多在线工具的做法是先把文件读成文字,替换换行后再存成 UTF-8。对 UTF-8 文件没问题,但 GBK 文件就会被悄悄改成 UTF-8,下游的 Excel 或老程序一打开就是乱码;如果编码还猜错了,读不懂的字节会被换成「�」,数据就永久丢了。

本工具直接在字节上改:换行字节 0D 与 0A 在 UTF-8、GBK、GB18030、Big5 里都不会出现在一个汉字的中间(这些编码里汉字的后续字节都大于 0x2F),所以按字节找换行一定不会切坏汉字,也就不需要知道文件是什么编码。GBK文件转换换行不乱码、UTF-8 的 BOM 原样保留,都是这个原因。

用命令行或 VS Code 怎么改换行符

  • 命令行:Linux 和 macOS 可以装 dos2unix,它就是「在线dos2unix」「在线unix2dos」想做的事:
    dos2unix deploy.sh      # CRLF 转 LF
    unix2dos readme.txt     # LF 转 CRLF
    没有 dos2unix 时,GNU sed 也能去掉文件里的^M(macOS 自带的 BSD sed 不认这个写法):
    sed -i 's/\r$//' deploy.sh
  • VS Code:点右下角状态栏的「CRLF」或「LF」,选另一种后保存。
  • Notepad++:菜单「编辑 → 文档格式转换」,选 Windows / Unix / Macintosh 格式后保存。
  • Git:core.autocrlf 有三个值——true 检出转 CRLF、提交转 LF(Windows 默认);input 只在提交时转 LF;false 不转。看到 git LF will be replaced by CRLF 就是 true 在起作用。
  • 整个仓库统一换行,正确做法是在根目录写 .gitattributes,然后让 Git 重新登记所有文件:
    # .gitattributes
    * text=auto eol=lf
    *.bat text eol=crlf
    *.cmd text eol=crlf
    git add --renormalize .
    git commit -m "统一换行符"

本页适合手边没有命令行、文件是 GBK 或 UTF-16、想先看清楚哪几行混用了、或者要一次批量转换换行符的情况。

换行符互转之后还能转回去吗

纯 LF 的文件转成 CRLF 再转回 LF,和原文件逐字节相同;纯 CRLF 的文件反过来也一样。但混用的文件不行:转换后所有行都是同一种换行,「哪些行原来是 CRLF、哪些是 LF」这件事已经没有记录了,再转回去不会还原成原来的混用状态。所以转换之前先看一眼检测结果,确认混用是不是你想消掉的。

CRLF转LF和LF转CRLF分别怎么操作

常见说法与在本页的操作
常见说法在本页怎么做
CRLF转LF / Windows换行转Linux换行 / \r\n转\n选「Linux / Git 规范」或目标选 LF
LF转CRLF / 记事本打开文件不换行选「Windows 记事本 / Excel」
查看文件是什么换行符 / 换行符检测拖入文件,结果卡直接显示风格与计数
文件换行符混用怎么办看结果卡里的混用行号,再选一种目标统一
去掉文件里的^M / bad interpreter ^M 怎么解决目标选 LF
csv换行符用excel打开目标选 CRLF,必要时再用编码转换加 BOM
文件末尾加换行 / 去掉文件末尾换行「末尾换行」选补一个或去掉
U+2028行分隔符勾选「把 Unicode 行分隔符也换成目标换行」
批量转换换行符一次拖入最多 50 个文件,全部打包下载

英文里这类工具叫 line ending converter,常见搜法有 line ending converter online、CRLF to LF converter、convert line endings 和 dos2unix online,说的都是同一件事。

什么情况下需要转换文件换行符

  • 在 Windows 上写好的 Shell 脚本、Python 脚本,传到 Linux 服务器之前转 LF。
  • 给 Windows 同事的 TXT、CSV、bat 文件转 CRLF,老记事本打开不再挤成一行。
  • 提交代码前统一换行,避免 Git diff 整个文件都变了;整仓库的统一交给 .gitattributes。
  • 字幕 .srt、配置文件 .env / .conf / .yml 混入了别的系统的换行。
  • 从网页复制、带 U+2028 的文本要放进 JSON 前先换成普通换行。