关于windows系统中vscode的中文乱码问题

问题:

最近我发现在 windows 的 vscode 中运行 UTF-8编码 的 C++源文件 后 终端输出的中文会乱码

可能原因:

文件编码 与终端编码不一致导致的(或许更加复杂)

实验代码:

C++ 复制代码
void solve()
{
    string a; cin>>a;
    cout<<a<<endl;
 
    string b="sadas阿三发射点发";
    cout<<b<<endl;
}

实验结果 → \to →本地终端:

  1. 对于cmd终端 将编码改成65001(UTF-8)编码就不会乱码了

  2. 对于PowerShell终端 将编码改成65001(UTF-8)编码依旧会乱码

实验结果 → \to →vscode终端:

  1. 对于cmd终端 ,vscode 会自动将编码改成65001(UTF-8)编码,并且输出不会乱码

  2. 对于PowerShell终端 ,vscode 也会自动将编码改成65001(UTF-8)编码 ,但是输出依旧会乱码(指的是通过 .\test.exe 执行时输出的中文会乱码)。

    原因可能是PowerShell 的编码处理机制与CMD不同:

    • CMD 是传统的命令行工具,直接依赖系统代码页 chcp 设置,且对 UTF-8 的支持较为直接,设置 chcp 65001 后,CMD 会尝试将输出视为 UTF-8。
    • PowerShell 是基于 .NET 的现代终端,其输入输出编码由以下因素控制:
      • [System.Console]::OutputEncoding(输出编码)
      • [System.Console]::InputEncoding(输入编码)
      • 默认使用系统的 ANSI 编码 (如 GBK),而非完全遵循 chcp 设置。

    解决方案:修改 PowerShell 配置文件

    1. 在 PowerShell 终端执行以下命令打开 PowerShell 配置文件:

      powershell 复制代码
      code $PROFILE
    2. 添加以下内容:

      powershell 复制代码
      # 设置 PowerShell 终端编码为 UTF-8
      
      # 控制 PowerShell 向外部程序传递数据时的编码(例如通过管道 | 或重定向 > 发送数据到其他进程),默认跟随系统区域设置(如 GBK)。
      $OutputEncoding = [System.Text.Encoding]::UTF8 
      # 控制 从控制台输入设备(如键盘)读取的文本的编码,即用户输入到 PowerShell 的字符如何被解码,默认与系统活动代码页一致(如 GBK)。
      [Console]::InputEncoding = [System.Text.Encoding]::UTF8
      # 控制 外部程序输出到 PowerShell 控制台的文本的解码方式,即外部程序(如 C++ 编译的 .exe)的输出如何被显示, 默认与系统活动代码页一致(如 GBK)。
      [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
    3. 重启 PowerShell 。

    再次尝试后发现 PowerShell 终于不乱码了!!!!!

总结:

  1. 如果想 本地终端 和 vscode终端 中的 cmd 一直都不会乱码的话,可以直接修改注册表使得 cmd 的默认编码是 65001(UTF-8) 编码。

    1. 打开注册表编辑器 :按 Win + R → 输入 regedit → 回车。

    2. 定位到以下注册表项 :HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage

    3. 修改 OEMCP 的值 :双击右侧的 OEMCP → \to → 将数值数据从 936 改为 65001。


    4. 重启电脑:修改后需重启系统才能生效。

  2. 如果想 本地终端 和 vscode终端 中的 PowerShell 一直都不会乱码的话,可以直接 修改 PowerShell 配置文件。

现在对于我个人来说乱码的问题倒是解决了,至于这样操作后会不会出现新的问题?对于其他的电脑管不管用?我也不知道,谁让我这个人满脑子只想着自己呢

相关推荐
free-elcmacom11 天前
手撕 memcpy 和 memmove:从字节级拷贝到内存重叠的终极较量
c语言·开发语言·青少年编程·visual studio code·visual studio
free-elcmacom20 天前
发际线警告!手撕《C陷阱与缺陷》终极 BOSS:signal 函数与 typedef 魔法
c语言·开发语言·visual studio code·visual studio
前端小白乘风20 天前
VS Code 终于能连微信了!发现一个硬核开源神仙插件:WeChat AHP
微信·visual studio code·deepseek
free-elcmacom22 天前
C语言指针进阶——指针数组模拟二维数组,以及二级指针到底怎么理解
c语言·visual studio code
formulahendry22 天前
微信和 VS Code 强强联合!WeChat AHP 来了
visual studio code·vs code
向北丶24 天前
vscode 导入语句排序和删除未使用的导入
前端·visual studio code
Eric_见嘉1 个月前
打开这个 VSC 设置「组件引用位置」和数量就都清楚了
前端·typescript·visual studio code
Flynt1 个月前
Chrome 修了个零日漏洞,你的 VS Code 和 Cursor 可能还在裸奔
安全·electron·visual studio code
一直C1 个月前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code
三十而立洋1 个月前
VSCode插件从0到1开发与发布完整实战
visual studio code