VS Code 终端运行 Python 出现中文乱码的解决方法

咖啡半糖
咖啡半糖
发布时间:2026-10-11| 7人浏览过
原创

在 VS Code 终端中运行包含中文的 Python 代码时,输出内容经常变成类似 ├╠或菱形问号等无意义字符。这种现象的根源在于“源码文件编码”、“Python 进程标准输出编码”与“VS Code 终端代码页”三者之间存在不匹配。本文将梳理这三个环节的数据流转机制,并提供从源头规范、终端配置到环境配置的完整解决方案。

一、乱码现象与问题根源:编码链路断层

在 Windows 环境下,VS Code 终端默认调用 PowerShell 或 CMD。乱码通常不是单一软件损坏造成的,而是字符在传递过程中遭遇了两次不同规则的转换。

完整的数据流包含三个核心节点:编辑器以特定编码(现行标准通常为 UTF-8)保存 .py 脚本;Python 解释器读取该文件,并在运行时决定向标准输出(stdout)发送什么字节序列;最后,VS Code 终端捕获这些字节,并使用当前终端的“活动代码页”(Active Code Page)进行文字还原。如果终端仍处于中文 Windows 默认的 GBK(代码页 936)模式,而接收到的是 UTF-8(代码页 65001)字节流,就会把双字节或三字节的字符拼装错乱,形成乱码。

VS Code 终端运行 Python 出现中文乱码的解决方法
图 1:Python 文本输出全链路模型与常见的编码冲突点

二、排查与修复步骤

彻底消除乱码需要按照“检查文件自身编码 → 统一终端代码页 → 约束 Python 运行环境”的先后次序逐一排查。

VS Code 终端运行 Python 出现中文乱码的解决方法
图 2:排查与修复乱码问题的标准操作步骤

第一步:确认并修改文件保存编码

如果 Python 脚本最初是在其他平台或老旧编辑器中创建的,文件本身可能采用 GB2312 或 GBK 编码保存,而 VS Code 默认按 UTF-8 读取,或者反之。

  1. 查看 VS Code 界面最下方的状态栏右侧,找到编码标识(默认通常显示 UTF-8)。
  2. 如果当前显示的不是 UTF-8,点击该位置,顶部会弹出两个选项:“通过编码重新打开 (Reopen with Encoding)” 和 “通过编码保存 (Save with Encoding)”。
  3. 选择 “通过编码保存”,在搜索框中键入 utf-8 并回车确认。此时文件内容将以标准的无 BOM UTF-8 格式重写。

第二步:调整终端活动代码页(Active Code Page)

很多时候文件本身确实是 UTF-8 编码,但 Windows 内置终端默认代码页是 936(简体中文 GBK)。

可以在终端中输入以下命令进行验证:

chcp

如果输出结果显示:

活动代码页: 936

说明此时终端会把接收到的字节都当成 GBK 解码,遇到 UTF-8 中文字符就会产生乱码。可以通过输入以下命令,临时将当前终端会话切换为 UTF-8 模式:

chcp 65001

执行后终端会提示 Active code page: 65001。再次运行 Python 代码,通常即可正常显示。但这种方式在关闭终端窗口重新打开后会失效,下文将说明如何通过 VS Code 配置文件持久化生效。

第三步:在 settings.json 中持久化配置环境

为了避免每次新建终端都要手动输入 chcp 65001,建议直接在 VS Code 的配置文件中为终端和 Python 插件注入编码约束。

使用快捷键 Ctrl + Shift + P(macOS 为 Cmd + Shift + P),输入并选择 “Preferences: Open User Settings (JSON)”,在打开的 settings.json 文件中追加如下配置:

{
    // 强制终端启动时设定环境变量,使 Python 标准输出使用 UTF-8
    "terminal.integrated.env.windows": {
        "PYTHONIOENCODING": "utf-8"
    },
    // 为 Windows PowerShell 自动附加 UTF-8 参数
    "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "args": ["-NoExit", "-Command", "chcp 65001 > $null"]
        }
    }
}
注意事项:配置修改保存后,已开启的旧终端不会自动刷新,必须点击终端面板右上角的垃圾桶图标关闭现有终端,并重新打开一个新终端才能读取全新配置。

三、两种解决路径的差异:临时调整 vs 全局/持久化修改

在实际解决乱码时,开发者往往面临两种策略:是在代码内临时调用 sys.stdout.reconfigure,还是通过 VS Code 配置文件统筹环境。下表与架构图展示了两者的差异及适用场景。

对比维度 代码级临时修补 (Python 脚本内) 环境级持久化配置 (VS Code settings.json)
实现方式 在代码开头显式执行 sys.stdout.reconfigure(encoding='utf-8') 配置 PYTHONIOENCODING 环境变量与 chcp 65001
侵入性 高。修改了项目业务代码,与业务逻辑无关的代码混入源码中。 无。仅在本地开发工具层生效,业务代码保持纯净。
跨平台兼容 部分平台可能产生重复重定向或不必要的兼容性开销。 良好。不同系统只需在 settings.json 中对应平台设置即可。
适用场景 单次排错验证、无法修改环境的受限容器内。 日常长期开发、多人协作统一环境规范。
VS Code 终端运行 Python 出现中文乱码的解决方法
图 3:代码级重定向与环境级持久化配置方案对比

四、验证测试与结果确认

完成上述配置后,需要通过一段包含字符串字面量、控制台交互以及异常打印的脚本来验证是否已彻底解决乱码。

新建一个名为 test_encoding.py 的文件,写入以下完整示例代码:

# -*- coding: utf-8 -*-
import sys

def verify_terminal_encoding():
    print(f"当前标准输出编码 (stdout.encoding): {sys.stdout.encoding}")
    print(f"系统默认编码 (getdefaultencoding): {sys.getdefaultencoding()}")
    
    test_chinese_str = "中文测试:你好,VS Code!"
    print("【直接打印测试】:", test_chinese_str)

if __name__ == "__main__":
    verify_terminal_encoding()

在终端中通过 python test_encoding.py 执行,正确的输出示例如下:

当前标准输出编码 (stdout.encoding): utf-8
系统默认编码 (getdefaultencoding): utf-8
【直接打印测试】: 中文测试:你好,VS Code!

如果 stdout.encoding 显示为 utf-8,且下方中文字符完整无畸变,则说明整个输入输出链条的编码映射已完全对齐。

五、总结:避免乱码的核心检查清单

排查 VS Code 终端乱码问题并不复杂,只要按顺序保证“源文件无损坏”、“解释器输出明确”、“终端渲染一致”,乱码问题即可稳定规避。

VS Code 终端运行 Python 出现中文乱码的解决方法
图 4:解决 VS Code 终端乱码的核心三要素总结
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。