C++/8/VS2022更改为UTF-8的n种方法

最后编辑时间:2024-10-31 09:35:35 星期四

C++/8/VS2022调试控制台更改为UTF-8的n种方法,彻底解决乱码问题

前置知识

  1. vs2022 基本操作
  2. UTF-8 和 GBK 字符集

环境:

  1. VS2022 17.11.5
  2. win11

0.我遇到的问题

在我使用C++的cpr库(C++ Requests)的时候,使用以下代码来打印输出:

//需要c++20
#inclide <print>
//网络请求
#include <cpr/cpr.h>
#include <string>

//文本处理
void handleWebText(cpr::Response& r)
{
	std::println("响应文本=>{}",t.text);//t.text为std::string
}

会报错退出,并且是乱码。
如果使用std::cout也是乱码,但是不会直接退出

1.解决思路

1.1 更改保存编码(只需要改一次)

首先尝试更改代码保存格式,打开扩展:
image
搜索并且安装Force UTF-8 (No BIM) 2022
image

这样就解决了保存编码的问题,但是还没有解决我的问题,仍然乱码

1.2 更改控制台编码(只需要改一次)

现在我们代码保存和编译的确是utf-8了,但是控制台还是GBK,也会出现乱码
验证猜想

//cmd
ehch

//powershell
ehch

//pwsh(powershell 7)
ehch

image

如图,是936GBK编码


然后写出这段c++代码

#include <stdlib.h>

int main()
{
	system("ehch");
	return 0;
}

运行,发现还是936GBK编码


接下来我们来改编码,引用 https://www.cnblogs.com/luckyang/p/18269484 ,但是只推荐以下步骤,其他的或多或少有坑或不实用(开一次要改一次之类的)

  1. 通过注册表来改(只需要改一次)
    • 按下Win + R打开“运行”对话框,输入regedit并按回车打开注册表编辑器。
    • 导航到以下路径:
    • HKEY_CURRENT_USER\Console
    • 如果没有Console项,你需要新建一个。
    • 在Console项下,新建一个DWORD (32位)值,命名为CodePage。
    • 双击CodePage,将其值设置为65001(这是UTF-8的代码页编号)。

  1. 通过注册表来改(两个都要做!)(只需要改一次)
    • 打开注册表编辑器:按下Win + R键,输入regedit,然后按回车键。
    • 导航到以下路径:
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
    • 在右侧窗格中,右键单击空白区域,选择“新建”>“DWORD值(32位)”。
    • 将新创建的DWORD值命名为“Autorun”,然后双击它以编辑其值数据。
    • 在“数值数据”框中,输入“chcp 65001”,然后点击“确定”。
    • 关闭注册表编辑器。
    • 重新启动cmd控制台,现在它应该默认使用utf-8编码了。

  1. 更改PowerShell(pwsh)
    • 在pwsh中输入$Profile($也要输入)
      image
      接下来手动导航到这个文件
    • 在文件最开始输入chcp 65001
      image
    • 保存并关闭文件,打开一个新的终端。会有一些报错,不要惊慌
    • 在pwsh中输入Set-ExecutionPolicy AllSigned(允许运行脚本)
    • 打开一个新的终端,看到这一行字就代表已经被强制替换为utf-8了
      image
    • 如果不喜欢每次都有这个提示,就学我在chcp 65001后换行加入clear

1.3 更改编译选项(每次都要!!!)

还是没有解决,还有一个办法,不过这个办法必须每一次新建项目都必须设置一次
在项目上右键,点击属性
image
在命令行添加/utf-8
image
确定,运行
image
终于解决了。。。。

posted @ 2024-10-31 10:19  归海言诺  阅读(4307)  评论(0)    收藏  举报