VSCode终端中文乱码怎么彻底解决

星明吖_3113

星明吖_3113

2026-03-23

596人浏览

原创

终端乱码主因是 locale 未正确继承,需按环境链排查:系统 locale → vscode 启动方式 → shell 配置 → python 编码推断 → 字体支持;macos/linux 须配 terminal.integrated.env.*,windows 用 chcp 65001 或 pythonioencoding。

vscode终端中文乱码怎么彻底解决

终端启动时就乱码,locale 显示 LANG=C 或空值

这是最常见根源:VSCode 终端没继承系统正确的 locale 设置,尤其在 macOS 或 Linux 上用 zsh/bash 时容易发生。不是字体问题,也不是 VSCode 设置里改“终端字体”能解决的。

实操建议:

VSCode
VSCode

避免常见的 VSCode 错误——设置冲突、调试器配置和扩展冲突。

下载
  • 先在系统终端(非 VSCode)里运行 locale,确认输出中 LANG 和 LC_ALL 是类似 zh_CN.UTF-8 或 en_US.UTF-8 的值
  • 如果 VSCode 终端里 locale 输出是 LANG=C,说明它没读取你的 shell 配置文件(比如 ~/.zshrc)
  • 打开 VSCode 设置(Cmd+, / Ctrl+,),搜 terminal.integrated.env,点击“在 settings.json 中编辑”,添加对应平台环境变量:
"terminal.integrated.env.linux": { "LANG": "zh_CN.UTF-8" },
"terminal.integrated.env.osx": { "LANG": "zh_CN.UTF-8" }

注意:Windows 用户不用设这个,乱码通常来自 chcp 编码不匹配,见下一条

Windows 下 PowerShell 或 CMD 中文显示为方块或问号

本质是终端代码页(code page)和实际输出编码不一致。PowerShell 默认用 UTF-16,但很多脚本/工具按 UTF-8 输出,而 Windows 终端默认 code page 是 936(GBK)。

实操建议:

  • 进 VSCode 终端后手动执行 chcp 65001(切换到 UTF-8),立刻生效,但每次新开终端都要重输
  • 一劳永逸:在 PowerShell 配置文件($PROFILE)末尾加一行:chcp 65001 > $null
  • 确保 VSCode 终端默认 shell 是 PowerShell(不是旧版 CMD),并在设置里确认:terminal.integrated.defaultProfile.windows 设为 powershell
  • 如果用 Git Bash,检查其安装时是否勾选了 “Use Windows' default console code page”,没勾选才支持 UTF-8

print("中文") 在 Python 脚本里输出乱码,但 echo "中文" 正常

这是 Python 自身编码感知问题,和终端设置无关。Python 启动时会根据环境变量推断 stdout 编码,若 LANG 错误或缺失,可能 fallback 到 cp1252(Windows)或 ASCII(Linux/macOS),导致写入失败或替换为

实操建议:

  • 不要依赖 sys.stdout.encoding,直接强制指定:在脚本开头加 import sys; sys.stdout.reconfigure(encoding='utf-8')(Python 3.7+)
  • 更稳妥的做法:所有涉及中文输出的 print,显式用 print("中文", encoding='utf-8') 不行——print() 没有 encoding 参数;正确做法是 sys.stdout.buffer.write("中文".encode('utf-8')),但太重;推荐统一用 print("中文") + 确保环境 LANG 正确(见第一条)
  • 如果跑在 Windows + Python 3.6 及以下,必须设环境变量 PYTHONIOENCODING=utf-8,否则 print() 一定乱码

改完配置还是乱码?重点查这三处

很多人反复改 VSCode 设置、字体、locale,却漏掉真正卡点的地方:

  • VSCode 是否以“从桌面图标启动”?macOS/Linux 下如果用命令行 code . 启动,它会继承当前终端的环境变量;但从 Dock 或应用菜单启动,会走干净的 login shell,不加载 .zshrc —— 这时必须靠 terminal.integrated.env.* 补环境变量
  • 终端字体本身不支持中文(比如 Menlo、Consolas),即使编码对,也会显示方块。在 VSCode 设置里搜 terminal font,换成 "Fira Code", "Microsoft YaHei", "Monaco" 这类混合字体栈
  • 某些插件(如 Remote-SSH)会覆盖终端环境。连远程机器时,乱码大概率是远端 locale 未配置,得在远程服务器上运行 sudo locale-gen zh_CN.UTF-8 && sudo update-locale

乱码问题从来不是单点故障,而是环境链断裂:系统 locale → VSCode 启动方式 → 终端 shell 配置 → Python 运行时推断 → 字体渲染支持。少一环,就回到问号和方块。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2135

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3282

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1096

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3759

7

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2920

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

2023.09.22

549

3

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

2024.03.01

1678

6

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5867

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程