Windows 下 CMD、Terminal 以及 PowerShell 的区别和中文乱码问题

Windows 下 CMD、Terminal 以及 PowerShell 的区别和中文乱码问题

本文由 AI 工具 Hermes 辅助整理生成,内容基于本人提供或公开信息汇总。本人已对内容进行确认。

在 Windows 开发环境里,经常会遇到几个容易混淆的概念:

  • CMD
  • PowerShell
  • Windows Terminal
  • .bat 脚本
  • .ps1 脚本
  • UTF-8、GBK、代码页

尤其是在前端项目、微信小程序、Node 工具链里,如果脚本或文件编码处理不当,很容易出现中文乱码。本文简单梳理一下它们之间的区别,以及如何尽量避免编码问题。

一、Terminal、CMD、PowerShell 不是同一种东西

可以先用一个简单比喻理解:

Terminal 是窗口
CMD / PowerShell 是窗口里运行的命令解释器
.bat / .ps1 是交给命令解释器执行的脚本文件

也就是说,Terminal 本身通常不负责“理解命令”,它只是负责显示文字、接收输入、管理标签页、字体和颜色。

真正执行命令的是 Terminal 里面运行的 Shell。

二、什么是 Terminal

Terminal 指的是终端窗口,例如:

Windows Terminal
传统控制台窗口 conhost.exe
VS Code 终端
JetBrains 终端
微信开发者工具里的终端

它主要负责:

显示命令行界面
接收键盘输入
显示命令输出
支持标签页
支持字体、颜色、主题

Windows Terminal 可以打开不同的 Shell,例如:

Command Prompt
Windows PowerShell
PowerShell 7
Git Bash
WSL Ubuntu

所以,Windows Terminal 不是 PowerShell,它只是一个容器。

三、什么是 CMD

CMD 是 Windows 传统的命令解释器,程序是:

cmd.exe

它常用来执行:

dir
cd
copy
set
echo
xxx.bat
xxx.cmd

CMD 对应的脚本文件通常是:

.bat
.cmd

CMD 的优点是兼容性强,历史很久。缺点是语法老旧,变量、条件、循环都比较别扭,而且中文编码容易受系统代码页影响。

在中文 Windows 系统里,CMD 默认代码页经常是:

chcp

可能输出:

活动代码页: 936

936 通常对应 GBK / GB2312 这一类中文编码。

这也是为什么 .bat 文件里写中文时,很容易出现乱码。

四、什么是 PowerShell

PowerShell 是比 CMD 更现代的 Shell 和脚本语言。

Windows 自带的一般是:

Windows PowerShell 5.1

它的程序通常是:

powershell.exe

虽然路径里可能有:

v1.0

但这不代表版本是 1.0。实际版本要用下面命令查看:

$PSVersionTable

或者:

$PSVersionTable.PSVersion

如果显示类似:

5.1.x

就是 Windows PowerShell 5.1。

PowerShell 脚本文件通常是:

.ps1

注意是 .ps1,不是 .psl

五、PowerShell 5.1 和 PowerShell 7 的区别

Windows 自带的 PowerShell 通常是:

powershell.exe -> Windows PowerShell 5.1

新版 PowerShell 通常是:

pwsh.exe -> PowerShell 7+

PowerShell 7 是新版、跨平台、更加现代的 PowerShell。它通常需要单独安装。

两者是并存关系,不是覆盖关系。也就是说,安装 PowerShell 7 之后,系统里通常会同时有:

powershell.exe  -> Windows PowerShell 5.1
pwsh.exe        -> PowerShell 7

所以如果你想用 PowerShell 7,需要明确运行:

pwsh

而不是:

powershell

六、PowerShell 5.1 为什么容易产生中文乱码

PowerShell 5.1 有历史包袱,尤其是在编码方面。

在 PowerShell 5.1 中,不同写文件方式的默认编码并不完全一致,例如:

Out-File
>
Set-Content
Add-Content

它们可能使用不同的默认编码。有的可能写成 UTF-16,有的可能按系统 ANSI 代码页写。

在中文 Windows 系统里,系统 ANSI 代码页经常接近 GBK。

而现代前端项目一般希望源码文件是:

UTF-8

所以如果 PowerShell 5.1 生成了 GBK 或 UTF-16 文件,而前端工具链按 UTF-8 去读取,就可能出现中文乱码。

常见场景包括:

生成 JS / TS 文件后中文注释乱码
生成 JSON 文件后中文内容乱码
生成 WXML / WXSS 文件后微信开发者工具显示异常
执行脚本时控制台输出乱码

七、升级 PowerShell 7 能不能解决乱码问题

答案是:可以大幅减少,但不能彻底保证所有乱码问题都消失。

PowerShell 7 的编码行为更现代,默认更偏向:

UTF-8 无 BOM

这和前端项目、Node、Vite、微信小程序、现代编辑器的习惯更加一致。

所以如果你主要做前端开发,安装 PowerShell 7 并把 Windows Terminal 默认 Shell 改成 PowerShell 7,是一个很好的选择。

但是,PowerShell 7 不能解决所有问题,因为:

CMD / .bat 仍然可能受代码页影响
老工具可能仍然按 GBK 读取文件
历史文件如果本身是 GBK,不会自动变成 UTF-8
Windows Terminal 只是窗口,不决定脚本文件编码
Windows PowerShell 5.1 仍然存在,误用 powershell.exe 还是可能踩坑

所以 PowerShell 7 是重要改进,但不是万能方案。

八、前端项目推荐使用什么编码

对于前端项目,推荐统一使用:

UTF-8 无 BOM

适合这些文件:

.js
.ts
.jsx
.tsx
.vue
.json
.css
.scss
.less
.html
.wxml
.wxss

这也是现代前端工具链最稳妥的选择。

尤其是微信小程序、Node、Vite、Webpack、ESLint、Prettier 等环境,默认都更适合 UTF-8。

九、写 PowerShell 脚本时如何避免乱码

如果脚本只面向 PowerShell 7,建议使用:

UTF-8 无 BOM

如果 .ps1 脚本需要兼容 Windows PowerShell 5.1,并且里面有中文字符串或中文注释,更稳的是:

UTF-8 with BOM

因为 PowerShell 5.1 对“无 BOM 的 UTF-8”识别不够稳定,有时会按系统 ANSI / GBK 去读。

在脚本里也可以显式设置输入输出编码:

[Console]::InputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8

写文件时,不要依赖默认编码,尽量明确指定:

Set-Content -Path "test.txt" -Value "中文内容" -Encoding UTF8

需要注意的是,在 Windows PowerShell 5.1 中,-Encoding UTF8 通常会生成 UTF-8 with BOM;而 PowerShell 7 的默认行为更接近 UTF-8 无 BOM。

十、写 BAT 脚本时如何避免乱码

.bat 文件是最容易踩中文编码坑的。

如果在 .bat 中使用中文,可以加:

@echo off
chcp 65001 >nul
echo 中文内容

并且把 .bat 文件保存为:

UTF-8 无 BOM

不建议 .bat 使用 UTF-8 with BOM,因为 BOM 可能污染第一行命令,导致奇怪问题。

更稳的做法是:

.bat 文件里尽量只写英文命令
中文内容交给 PowerShell、Node、JS 或 UTF-8 文本文件处理

十一、实用建议总结

如果你是前端开发者,建议这样配置:

安装 PowerShell 7
Windows Terminal 默认配置改成 PowerShell 7
日常命令优先使用 pwsh,而不是 powershell
项目源码统一 UTF-8 无 BOM
.bat 文件尽量不写中文
必须写中文 .bat 时使用 chcp 65001,并保存为 UTF-8 无 BOM
需要兼容 PowerShell 5.1 的 .ps1 中文脚本,使用 UTF-8 with BOM 更稳

一句话总结:

Terminal 是窗口,CMD 和 PowerShell 是 Shell。
PowerShell 5.1 编码历史包袱较多,PowerShell 7 对 UTF-8 更友好。
前端项目应统一使用 UTF-8 无 BOM,尽量避免 GBK。
posted @ 2026-05-28 11:14  jialiangzai  阅读(136)  评论(0)    收藏  举报