正确解决 VS CodeGCCClang 编译时中文乱码问题

    科技2024-08-06  31

    症状描述:

    在 Windows 环境下 C/C++ 源代码包含中文字符串时:比如 cout << “你好” <<endl; 这时 gcc、clang 都能正常编译,但是运行时显示乱码。网上乱搜一通,排名靠前的解决方法基本差不多。 网上最容易搜到的方法:

    —— “这是因为新建文本默认编码为 UTF-8,把文本编码方式更改为 ANSI 即可” —— “改完文本编码后,VS Code 状态栏右下角 UTF-8 改为 GB2312” —— “改了以后 clang 编译会有警告怎么办,编译时在 clang 后面加上参数 -Wno-invalid-source-encoding 可以屏蔽警告”

    对于这些方法,我总觉得不对劲:

    1、为什么我在 Linux 下编译就没有这些问题? 2、在我的印象中 UTF-8 更新,更强,兼容全球语言字符,ANSI 则比较老旧,为什么非要回到解放前? 3、搜索 "clang 中文乱码" 时发现这篇文章 :颤抖吧:clang中文编程,真正不可维护的代码!!,让我看到了 clang 的中文支持有多么强大。既然如此为什么还要去做屏蔽警告这种掩耳盗铃的事情呢?

    所以问题不应该归于编译器上,于是我试着搜索 “PowerShell 中文乱码”,这才知道真正的问题出在 Windows 的控制台(CMD / PowerShell)上,并找到了正确的解决办法。又因为这些文章的标题和 GCC / Clang / VS Code 之类的问题不对口,所以我写这篇文章搭个桥,防止有同样困扰的人找错路。 正确方法:

    针对 PowerShell:

    在 Win 图标处右键,打开 Windows PowerShell (管理员),执行命令:

    Set-ExecutionPolicy Unrestricted

    打开 “此电脑\文档”,新建文件夹 “WindowsPowerShell” 并进入。新建文本文档并命名为:

    Microsoft.PowerShell_profile.ps1

    用记事本编辑,粘贴以下代码并保存:

    $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

    打开 PowerShell 执行:

    chcp

    结果如下即成功:

    Active code page: 65001
    Processed: 0.009, SQL: 8