最近我让 AI 帮写了一些脚本,都是和文件操作有关的。前段时间写了个 ps 脚本,刚才又写了个 bat 脚本,都因为编码问题踩了坑。
bat 脚本需要用记事本保存为 ANSI 编码,不能使用 UTF-8,否则会导致脚本内容解析错误而无法运行。
而且还有个坑:我的系统是 Windows 11 简体中文版,AI 说 ANSI 编码在简体中文系统中对应 GBK/GB18030,但我在 VSCode 里保存成这两种编码依然报错,最后只能用记事本保存为 ANSI 编码的才能正常运行。
PowerShell 5.1 脚本需要保存为 UTF-8 with BOM 编码,不带 BOM 不行。
更新:PowerShell 有个开源版本(PowerShell 7),它是需要独立安装的,也是独立运行的(与 Windows 自带的 PowerShell 5.1 并存)。它的脚本后缀名也是 .ps1,但是不需要带 BOM,不会因为编码问题踩坑了。而且 PS 7 对路径、文件名里的中文支持更好,我现在已经用它替代了 PS 5.1。
Google Chrome 118
Windows 10/11
这个坑我也踩过,windows控制面板里 时钟和区域 - 区域 - 管理 - 非 Unicode 程序的语言 - 更改系统区域设置
如果勾选 Beta版:使用 Unicode UTF-8 提供全球语言支持
那么命令行默认的编码就是UTF-8,否则就是GBK
也可以用chcp 65001手动指定当前命令行(批处理文件)使用UTF-8编码