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

问题:

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

可能原因:

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

实验代码:

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

实验结果 <math xmlns="http://www.w3.org/1998/Math/MathML"> → \to </math>→本地终端:

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

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

实验结果 <math xmlns="http://www.w3.org/1998/Math/MathML"> → \to </math>→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 <math xmlns="http://www.w3.org/1998/Math/MathML"> → \to </math>→ 将数值数据从 936 改为 65001


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

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

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

相关推荐
魔术师ID4 天前
vue2.0 组件生命周期
前端·javascript·vue.js·学习·visual studio code
MingT 明天你好!4 天前
在vs code 中无法运行npm并报无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查
前端·npm·node.js·visual studio code
Ynov8 天前
详细解释api
javascript·visual studio code
程序员Bears22 天前
现代前端工具链深度解析:从包管理到构建工具的完整指南
前端·python·visual studio code
formulahendry23 天前
把 MCP Server 打包进 VS Code extension
visual studio code·vs code·mcp
程序员Bears25 天前
深入理解CSS3:Flex/Grid布局、动画与媒体查询实战指南
前端·css3·媒体·visual studio code
优弧25 天前
VSCode配置重置完全指南
visual studio code
H5开发新纪元1 个月前
VS Code 插件开发实战:代码截图工具
javascript·visual studio code
程序员Bears1 个月前
HTML5 新特性详解:语义化标签、表单与音视频嵌入
前端·html·html5·visual studio code
demo007x1 个月前
四、从 0 开始构建一个代码库-向量数据库的选择与集成
visual studio code·cursor·trae