notepad++ 默认保存 utf-8 文件带 bom,易导致 node.js、nginx 等报错;应手动选择“utf-8 without bom”保存或转换,bom 为不可见字节 ef bb bf,需用命令行或错误现象验证,批量处理需逐文件操作或使用 sed 等工具。

Notepad++ 默认保存 UTF-8 文件会带 BOM,很多脚本、配置或 Web 服务(比如 Node.js、Nginx、PHP)读取时会因开头的 \xEF\xBB\xBF 报错或行为异常——必须手动切换编码方式才能避免。
怎么保存为无 BOM 的 UTF-8
Notepad++ 没有“默认关闭 BOM”的全局开关,每次保存都得选对编码。关键在「编码」菜单里的选项名称:
-
UTF-8→ 带 BOM(这是 Notepad++ 里名字最误导人的一个选项,实际等价于UTF-8 with BOM) -
UTF-8 without BOM→ 真正无 BOM 的标准 UTF-8,应选此项 - 如果当前文件已是
UTF-8(带 BOM),直接点「另存为」再选UTF-8 without BOM即可;但「保存」按钮不会改变编码,只会用原编码覆写
为什么改了编码后内容看起来没变
BOM 是三个不可见字节 \xEF\xBB\xBF,位于文件最开头,普通编辑时完全看不到。是否生效得靠外部验证:
- 用命令行检查:
head -c 3 filename | xxd,输出00000000: efbb bf表示仍有 BOM;空输出或非该值说明已去除 - Python 读取时报
UnicodeDecodeError或开头多出字符,基本就是 BOM 搞的鬼 - Webpack、ESLint、JSON 配置文件加载失败,也常因 BOM 导致解析器误判开头字符
批量转换已有文件的坑
不能靠「全选 → 右键转编码」来批量去 BOM,Notepad++ 的「编码」菜单中「转为 UTF-8 without BOM」仅对当前文件有效,且不支持多标签批量操作:
- 打开每个文件 →
编码 → 转为 UTF-8 without BOM→ 再Ctrl+S保存(注意不是「另存为」) - 如果文件原本是 ANSI 或 GBK 编码,先确认内容能正确显示,再转,否则会乱码
- 插件
Python Script可写脚本批量处理,但需额外安装配置,普通用户不如用命令行工具如sed -i '1s/^\xEF\xBB\xBF//' *.js(Linux/macOS)更稳
真正麻烦的不是操作步骤,而是很多人根本不知道自己正在被 BOM 影响——它不报错、不提示、不显示,只在某些环境下悄悄让程序出问题。一旦怀疑,优先查 BOM。










