Windows系统如何将Visual Studio Code终端设置为UTF-8编码
Windows VS Code终端UTF-8制表符乱码解决方案
核心问题说明
单纯执行chcp 65001、添加编译编码参数只解决了编码传输层的问题,出现部分字符正常、部分字符乱码/显示为?/�,本质是三个配置缺漏:Java编译/运行时编码不统一、终端启动未固定切UTF-8代码页、终端使用的字体未收录对应Unicode区段的制表符。
之前移除-encoding UTF-8后大部分字符正常属于巧合:未指定编译编码时,javac会默认读取系统GBK编码,大部分低码位制表符刚好在GBK中有兼容映射,但\u2501(粗横框线)不在GBK兼容覆盖范围内,必然出现乱码。
分步配置步骤
1. 固定Gradle编译与运行编码
必须把UTF-8编译参数加回,不要依赖系统默认编码,在项目build.gradle中添加如下配置:
// 固定编译阶段编码为UTF-8 tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } // 固定运行/测试阶段JVM默认编码为UTF-8 tasks.withType(JavaExec) { jvmArgs = ['-Dfile.encoding=UTF-8'] } tasks.withType(Test) { systemProperty 'file.encoding', 'UTF-8' }
2. 固定VS Code集成终端默认代码页
不要每次手动执行chcp 65001,直接配置终端启动自动切换:
- 按下
Ctrl+,打开VS Code设置,搜索terminal.integrated.profiles.windows,点击在settings.json中编辑 - 根据你使用的默认终端添加启动参数:
- 使用CMD时,对应配置项添加:
"args": ["-k", "chcp 65001"] - 使用PowerShell时,对应配置项添加:
"args": ["-Command", "chcp 65001"]
配置示例(PowerShell):
- 使用CMD时,对应配置项添加:
"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-Command", "chcp 65001"], "icon": "terminal-powershell" } }
3. 更换支持全量制表符的终端字体
这是\u2501单独乱码的核心原因:Windows终端默认的Consolas字体没有收录U+2500-U+257F区段的全部框线绘制字符,缺字时就会渲染为乱码。
在VS Code设置中搜索terminal.integrated.fontFamily,替换为支持全套制表符的等宽字体,可选方案:
Cascadia Mono:Win11系统自带,微软官方为终端开发的字体,字符覆盖完整,显示效果最优NSimSun(新宋体):全版本Windows自带,字符覆盖全无需额外安装JetBrains Mono:第三方免费编程字体,制表符对齐效果好
修改字体后重启VS Code终端即可生效。
4. (可选)开启系统全局UTF-8支持
如果完成以上配置仍有偶发乱码,可以开启Windows系统级UTF-8支持:
- 打开「控制面板」→「区域」→「管理」选项卡→点击「更改系统区域设置」
- 勾选「Beta版:使用Unicode UTF-8提供全球语言支持」
- 重启电脑后全局生效,所有程序默认使用UTF-8编码,无需单独切换代码页。
验证配置
新建测试类运行,所有框线字符正常显示无乱码即配置完成:
public class BoxDrawTest { public static void main(String[] args) { // 覆盖常用制表框线字符 System.out.println("┌─┬─┐"); System.out.println("├─┼─┤"); System.out.println("━┃┓┫┛┻┗┣"); System.out.println("└─┴─┘"); } }
注意:旧版独立CMD存在UTF-8渲染bug,不要用它做验证,优先使用VS Code集成终端或新版Windows Terminal运行程序。
内容的提问来源于stack exchange,提问作者SantasSpy
相关产品推荐
相关产品推荐

