cmd 终端输出乱码问题 |Visual Studio 控制台输出中文乱码解决

在网上下载,或者移植别人的代码到自己的电脑,使用VS运行后,控制台输出中文可能出现乱码。这是因为源代码的编码格式和控制台的编码格式不一致。

查看源代码文件编码格式

打开项目文件夹,找到源代码文件,右击,打开方式选择「记事本」。在右下角会发现有一个编码格式的说明。常见的就是GB18030UTF-8 两种情况,GB是国标的缩写。
在这里插入图片描述
在记事本中点击另存为可以更改编码格式,这里不做赘述。

查看输出控制台编码格式

打开cmd命令行,会跳出控制台输出窗口,或者称作「终端」。
但是Visual Studio 通常使用的不是cmd窗口,因此我们需要编译运行我们的源文件。
右击控制台窗口(不是黑框),点击属性。
在这里插入图片描述
会跳出窗口的属性,在选项中,会有一个当前代码页。
其中,65001 表示UTF-8编码,936表示GB18030的编码。
在这里插入图片描述

修改编码格式

修改源文件的编码格式,最基本的方法就是上述提到的,在记事本中「另存为」,即可修改。

不过,源文件通常情况下很多,所以我们一般修改的是终端的编码。下面介绍下如何修改终端代码页,也就是编码格式。

修改终端代码页

方法一: 在代码的main程序中,可添加一段设定控制台编码的代码。
如果是C++,则可以使用:

    SetConsoleOutputCP(CP_UTF8);  // 输出编码设定
    SetConsoleCP(CP_UTF8);        // 输入编码设定

如果是C#,可以用这个:

        // 设置控制台输入输出编码为UTF-8
        Console.OutputEncoding = Encoding.UTF8;
        Console.InputEncoding = Encoding.UTF8;

方法二: 可提前在终端窗口的命令行提示符中,使用cmd命令修改编码。但是这种修改是暂时的,下一次打开,又得重新修改。

chcp 65001

既然可以通过命令行修改,那么我们则可以在写的程序中调用命令行,就无需手动修改。
调用系统命令的方法如下:

// C++
system("chcp 65001 > nul");  // 隐藏命令输出
// C#
System.Diagnostics.Process.Start("cmd.exe", "/c chcp 65001 > nul");

方法三: 修改注册表

修改注册表可以永久设置控制台窗口的编码格式。

  1. 按 Win+R 输入 regedit,打开注册表编辑器。
  2. 找到路径:
计算机\HKEY_CURRENT_USER\Console

在这里插入图片描述

  1. 找到Visual Studio 的 console.exe ,修改codePage即可。注意需切换到十进制,65001 才表示UTF-8编码,936 表示GB18030。

同样的,这个方法三 ,修改system32_cmd.exe ,则修改的是cmd窗口的编码格式,也是修改codepage即可。

「方法三」修改一次,后续则一直沿用设置,此外,写代码的时候,建议使用「方法一」,在代码中就把终端编码设置与源代码文件一致,这样可以保证放在其他电脑也不会出现乱码。

补充

VS的输出终端通常使用的是VS自带的控制台窗口,有的电脑安装了VS,但是在修改注册表时,在Console中,可能没有找到VS相关的 console.exe
我们依旧打开注册表,找到这个路径:

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

右击新建 => 字符串值。这个时候,再找到之前说的Console路径,就会发现出现了与Visual Studio相关的控制台窗口了,修改codepage即可。

此外,这里列举一些与终端编码格式相关的cmd命令,在命令行窗口中可使用:
查看编码格式代码:

chcp

修改编码格式为UTF8:

chcp 65001

除了使用记事本,还可以如何查看源文件编码格式?可以通过VScode,sublime 等编辑器打开,都可以看到源文件的编码。如果偏偏想用Visual Studio打开源文件,且查看编码格式的话,可以在扩展管理器中搜索FileEncoding 安装使用。这样,用VS打开可以在右下角随时查看,并且每次写代码之前也可提前修改好编码格式,再开始写代码。
在这里插入图片描述

总结

通过修改注册表可以永久修改终端的编码格式,而如果想保险一点,可以在写代码时,就设定好终端控制台的编码格式。但除非代码需要移植,在我们自己的电脑上,自己写程序+编译运行,一般是不会出现乱码的,所以很少代码会有设定终端编码的习惯。

### Visual Studio 中文输出乱码解决方案 #### 件编码设置不当引起的中文乱码 当遇到Visual Studio中的中文注释或其他地方出现乱码的情况时,这通常是由件编码格式不正确所引起[^1]。为了确保项目内的所有档都能正常解析其中的汉字字符,应当确认这些件是以UTF-8无BOM的方式保存。 #### 安装FileEncoding插件辅助处理 对于希望更方便地管理和转换不同编码类型的开发者来说,可以通过安装名为`FileEncoding`的Visual Studio扩展来简化操作流程[^4]。此工具允许用户直观地查看当前打开件的具体编码方式,并提供一键更改选项,从而减少因编码差异而导致的问题发生几率。 #### 修改项目属性以支持多字节字符集(MBCS) 针对某些特定场景下的应用开发需求,比如桌面应用程序或游戏引擎集成等场合,则建议调整项目的默认字符集配置为“使用Unicode库”,而非传统的MBCS模式。具体做法是在项目属性窗口内找到C/C++ -> 常规 -> 字符集这一项并做相应设定。 ```cpp // 示例:在源代码顶部加入预处理器指令强制启用宽字符支持 #define _UNICODE #include <tchar.h> ``` #### 设置控制台字体与代码页匹配 另外一个重要方面在于保证Windows命令提示符(Command Prompt)使用的字体能够良好呈现东亚语言字的同时也要记得执行如下cmd命令切换至兼容性更好的GBK/GB18030编码表: ```batch chcp 65001 // 切换到 UTF-8 编码 (推荐) // 或者 chcp 936 // 使用 GBK 编码 ``` 以上措施结合起来可以帮助解决大部分情况下Visual Studio环境中存在的中文显示异常现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值