Notepad++仅能直接显示并清理空格、Tab、CR/LF等原生支持的隐藏字符;零宽字符(如\u200B)、BOM(\uFEFF)及低字节控制符(如\x01)需通过扩展模式查找、正则匹配或Hex-Editor插件处理。

Notepad++ 本身无法“批量清除”所有隐藏字符——它能可靠处理的只有空格、Tab、CR/LF 和部分 Unicode 空白;而 \u200B、\uFEFF、\x01 等控制符默认不可见、不匹配、不清理,必须分步应对。
哪些隐藏字符 Notepad++ 能直接显示并清理
按 Ctrl+Shift+P(不是 Ctrl+Shift+8,新版已改)启用「显示所有字符」后,你能看到:
- · 表示空格(
) - → 表示制表符(
\t) - ¶ 表示换行符(
\r\n或\n)
这些是 Notepad++ 原生支持渲染和操作的字符。对应清理方式如下:
- 删行尾空白:用
编辑 → 行操作 → 删除尾部空白,精准清除每行末的和\t,不影响中间或行首 - 删空白行:优先用
编辑 → 行操作 → 移除空白行(包括空白字符)(Notepad++ 7.9+ 内置),它能识别\u00A0(不换行空格)等常见 Unicode 空白,且不被 BOM 干扰 - 删行首空格/Tab:正则查找
^\s+,勾选「正则表达式」后替换为空
为什么 \u200B、\uFEFF 这类字符搜不到也删不掉
Notepad++ 的「显示所有字符」和正则引擎对以下字符完全无感:
-
\u200B(零宽空格)、\uFEFF(BOM)、\x01(SOH)、\x03(ETX) - 它们在界面上就是“纯空白”,
Ctrl+F搜\u200B或\x01必须切到「扩展」模式才可能命中 -
^[^\w\s]、\s、.等正则在默认 UTF-8 设置下根本不会匹配它们
验证是否存在这类字符:
- 按
Ctrl+F→ 切换查找模式为「扩展」→ 输入\x01或\u200B→ 点「查找全部」 - 若高亮出现但界面没符号,基本就是零宽类字符藏在文本里
真正能批量清理控制符的实操路径
没有一键方案,但可组合出稳定流程:
- 先用
编辑 → 行操作 → 删除尾部空白和移除空白行(包括空白字符)清掉可见空白层 - 再用正则批量扫 Unicode 控制符:
[\x{200B}-\x{200D}\x{FEFF}\x{2028}\x{2029}\x{00A0}](注意勾选「匹配全部字符」+ UTF-8 编码) - 对
\x01-\x08、\x0B-\x0C、\x0E-\x1F等低字节控制符,必须用 Hex-Editor 插件打开二进制视图确认位置,再手动或脚本清理 - 若需自动化多文件处理,别依赖宏——改用 Python 脚本读取 UTF-8 文件,用
re.sub(r'[\u200B-\u200D\uFEFF\u2028\u2029\u00A0]', '', text)更可控
最容易被忽略的兼容性陷阱
你清理完保存,别人打开仍报错?问题常出在:
- 文件编码未统一:含
\u200B的文本若以 ANSI 保存,该字符会变乱码;务必用 UTF-8 无 BOM 保存 - BOM 被误删或残留:Notepad++ 的「移除空白行」不碰 BOM,但「删除尾部空白」也不动它;若需彻底去 BOM,得用「编码 → 转为 UTF-8 无 BOM 格式」
- 正则替换后缩进错乱:比如用
^[^\w\s]删#时,若后面跟\t,得写成^[^\w\s][\s\t]*才一并清掉,否则留个 Tab 导致 Python 报IndentationError
零宽字符和低字节控制符永远不在「显示所有字符」的覆盖范围内——这不是设置问题,是 Notepad++ 的能力边界。真要深度排查,得切到十六进制视图或换工具。


















