VS Code终端运行Python出现中文乱码怎么解决
深入剖析在 VS Code 终端运行 Python 代码时中文出现乱码的根源,提供检查文件保存编码、配置 VS Code 终端环境变量(PYTHONUTF8 / PYTHONIOENCODING)、调整终端代码页等完整解决步骤与方案对比。
PYTHONUTF8=1 环境变量,并确保源码文件保存为带无 BOM 的 UTF-8 编码。
一、乱码产生的核心根源剖析
很多开发者在刚开始使用 VS Code 学习或编写 Python 时,经常会遇到在代码中使用 print("中文内容"),但集成终端中却输出类似于 浣犲ソ、锟斤拷锟斤拷 或者一串问号的情况。要彻底解决该问题,首先需要了解中文字符在终端中被输出的完整流程。
在 Windows 系统中,字符从代码到屏幕显示经历了三个独立环节:
- 源代码存储编码:你在 VS Code 中敲下代码并保存时,磁盘文件所采用的编码(现代开发通常为 UTF-8,但在部分中文 Windows 预设下可能被存为 GBK/CP936)。
- Python 标准输入输出(I/O)编码:Python 解释器在执行
print()输出文字时,会将字符串转码为字节流发送给操作系统控制台。在 Windows 下,Python 3 默认会检测系统的控制台代码页(Console Code Page),若当前为中文系统默认环境,常常回退为 GBK 编码输出。 - VS Code 终端代码页与字符解析:VS Code 内置的 PowerShell 或 CMD 窗口负责读取该字节流,并使用自身的代码页解释为可见字符。若终端以 UTF-8 解码一个实际为 GBK 的流,或者以 GBK 解码一个 UTF-8 流,就会发生字形映射错误,产生乱码。
二、快速解决:四步标准排查与修复流程
按照系统化的检查顺序,可以由浅入深定位并解决问题。无需盲目重装软件,只需完成以下四个步骤。
步骤一:确认源文件的保存编码
打开出现中文乱码的 Python 脚本,观察 VS Code 窗口右下角的状态栏。
- 查看状态栏右侧是否显示为
UTF-8。 - 如果显示的是
GBK或Simplified Chinese (GB2312),请点击该区域,在弹出的顶部下拉菜单中选择 “通过编码重新保存” (Save with Encoding),并选择 UTF-8。 - 在 VS Code 全局设置中,可以搜索
files.encoding,确认默认值保持为utf8。
步骤二:检查并临时调整终端活动代码页
在 VS Code 底部终端(PowerShell 或 CMD)中,输入查询代码页命令:
chcp
代码页 936 代表简体中文 GBK/GB2312 编码;而代码页 65001 才代表 UTF-8 编码。你可以在当前终端中执行以下命令临时切换:
chcp 65001
切换后再运行 python test.py,通常会发现乱码消失。但注意:新开一个终端标签页后,该命令会失效,因此我们需要在步骤三中进行永久固化。
步骤三:在 VS Code 中固化环境变量(推荐做法)
最彻底且不改动系统全局环境的方式,是为 VS Code 内置终端预置环境变量,强制 Python 在控制台 I/O 时启用 UTF-8 模式。
打开 VS Code 的配置文件:
- 按快捷键 Ctrl + Shift + P(macOS 上为 Cmd + Shift + P)。
- 输入
Preferences: Open User Settings (JSON)打开settings.json。 - 在根 JSON 对象中追加以下配置块:
{
"terminal.integrated.env.windows": {
"PYTHONIOENCODING": "utf-8",
"PYTHONUTF8": "1"
}
}
•
PYTHONUTF8: "1":自 Python 3.7 起支持的 UTF-8 模式,激活后将忽略操作系统区域编码设置,强制 Python 标准流和文本处理全部默认使用 UTF-8。•
PYTHONIOENCODING: "utf-8":兼容更早版本 Python,直接约束 sys.stdin、sys.stdout 和 sys.stderr 采用 UTF-8 格式传输。
步骤四:运行测试脚本进行闭环验证
新建一个名为 encoding_verify.py 的文件,编写包含标准输出与中文交互的脚本:
# encoding_verify.py
import sys
print("=== Python 终端编码验证 ===")
print("当前默认编码:", sys.getdefaultencoding())
print("标准输出编码:", sys.stdout.encoding)
print("中文输出测试: 你好,世界!")
user_text = input("请输入一段中文并回车确认: ")
print("接收到的内容:", user_text)
在 VS Code 终端中重启一个终端(点击右上角的垃圾桶图标关闭旧终端,点击 + 号新建),输入命令执行:
python encoding_verify.py
三、方案对比:环境级配置 vs 代码内动态重编码
在排查乱码时,网上常常见到另一类做法:在 Python 脚本开头写入 sys.stdout.reconfigure(encoding='utf-8')。在实际开发中,这两种方式存在本质差异。
从长远维护角度看,强烈推荐方案 A(环境级配置)。它把开发环境中的显示适配问题交由开发工具(VS Code)解决,使 Python 代码本身保持整洁和跨平台通用性。方案 B 仅适合当你临时借用他人电脑、或无法修改编辑器配置文件时的临时验证手段。
四、进阶场景与常见遗留问题排查
如果已经配置了 settings.json,但在特定情况下依然出现中文乱码,可以针对以下三种常见场景逐一排查。
1. 使用 Code Runner 插件右上角三角形运行时乱码
部分开发者习惯安装 Code Runner 插件,并点击右上角的运行小三角。需要注意:Code Runner 默认是将程序输出在 VS Code 的“输出”(Output)面板,而不是“终端”(Terminal)面板。
- “输出”面板属于静态文本流,不支持交互式
input(),并且它并不继承terminal.integrated.env.windows中配置的环境变量。 - 解决办法:打开 VS Code 设置,搜索
code-runner.runInTerminal,将其勾选为true。这样点击右上角三角时,代码就会自动在内置终端中执行,从而完整继承所有编码环境变量。
2. PowerShell 默认启动配置(针对旧版 Windows PowerShell 5.1)
在 Windows 10/11 自带的默认 PowerShell 5.1 中,终端控制台默认遵循系统 ANSI 代码页。如果你希望每次打开 PowerShell 时默认就是 UTF-8 代码页,可以通过配置 PowerShell Profile 实现:
# 在终端执行以下命令编辑或创建 profile 文件
notepad $PROFILE
在打开的记事本中加入这一行保存即可:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
3. 文件读写中的乱码与终端乱码的区分
有时读者会发现:直接 print("你好") 正常,但在读取一个包含中文的本地 .txt 或 .csv 文件时,终端依然报 UnicodeDecodeError 或输出乱码。
请注意区分终端输出乱码与文件 I/O 解码错误。在 Windows 下,Python 的 open() 函数如果不显式传入 encoding 参数,默认会采用操作系统本地编码(如 GBK)。因此读取 UTF-8 文本时必须明确指定编码:
# 正确读取中文文件的写法
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
五、总结
解决 VS Code 终端运行 Python 出现中文乱码的关键在于打通端到端的 UTF-8 链路。总结为三句具体做法:
- 看右下角:确保源码文件采用 UTF-8 编码保存。
- 改 settings.json:通过
terminal.integrated.env.windows为终端增加PYTHONUTF8=1与PYTHONIOENCODING=utf-8。 - 配 Code Runner:若习惯点三角运行,开启
runInTerminal使其在集成终端中生效。
完成以上配置后,无论是在终端中直接打印中文字符串、处理中文命令行参数,还是使用 input() 交互输入中文,均能得到清晰、准确的显示效果。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













