> 文章列表 > Visual Studio如何将UTF-8字符串输出到控制台

Visual Studio如何将UTF-8字符串输出到控制台

Visual Studio如何将UTF-8字符串输出到控制台

解决c语言使用libcurl库时控制台输出中文出现乱码的问题。

字符编码问题一直以来都是Windows系统的诟病,而Visual Studio也是饱受此诟病。由于历史原因,Windows系统对各个不同的国家地区可能采用不同的code page。由于早先Unicode并未发展成熟,因此Windows的字符编码问题也确实属于一个历史遗留问题。而如今,Visual Studio早就可以支持Unicode字符编码了,但它却仍然不是默认配置,我们要使用UTF-8字符编码进行输出到控制台仍然需要一些比较繁琐的配置。

这里笔者就来详细描述Windows 10/11系统下如何在C/C++编程语言中将UTF-8字符串输出到控制台!

1.创建项目工程

  可参考链接: VS2022 和 VS2010 C语言控制台输出 Hello World_vs控制台输出_西晋的no1的博客-CSDN博客

2. c语言使用libcurl库时控制台输出中文有问题(这也是本文写作要的起因)

可参考链接编译并使用: VS2010编译libcurl库并简单使用(c语言)_西晋的no1的博客-CSDN博客

3.代码文件用UTF-8无签名

  为了确保新建的源文件“demo.cpp”其字符编码是UTF-8编码格式,我们可以将“demo.cpp”文件显式地使用UTF-8字符编码格式做另存。我们首先双击我们新建的“demo.cpp”文件,然后点击菜单栏上的“文件”,随后选择“另存为”,如下图所示:

这里选择的是“UTF-8 无签名”也就是所谓的“UTF-8 NO-BOM”字符编码格式。一般来说,当前Visual Studio 2010所创建的文件一般均默认为带有签名的UTF-8,而这种格式可能在其他类Unix系统上的某些编辑器支持不好,从而也有可能导致乱码。为了可跨平台性,我们使用不带签名的UTF-8会更好一些。

4.设置字符集Unicode

检查一下字符集是否已经为Unicode字符集了,当前Visual Studio一般默认为Unicode字符集。

选择项目名,点击鼠标右键,选择弹出菜单中的属性,进入项目属性页

在项目属性页的配置属性->常规->字符集下查看字符集是否已经为Unicode字符集

5.输出utf-8字符串

在Windows 10/11环境下,我们还需要调用 SetConsoleOutputCP(CP_UTF8); 这-WindowsAPI来指定控制台输出采用UTF-8编码。这个设置可以放在程序开头。

这里需要提醒各位的是,可别忘记包含<Windows.h> 。此外,W是大写的而不是小写的。

6.代码示例展示

下面展示一下代码以及程序运行结果

输出UTF8中文值-乱码:

#include <curl/curl.h>int main() {CURL* curl = curl_easy_init();if (curl) {CURLcode res;curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");res = curl_easy_perform(curl);curl_easy_cleanup(curl);}return 0;
}

运行结果:

输出UTF8中文值-正常:

#include <curl/curl.h>
#include <Windows.h>int main() {SetConsoleOutputCP(CP_UTF8);CURL* curl = curl_easy_init();if (curl) {CURLcode res;curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");res = curl_easy_perform(curl);curl_easy_cleanup(curl);}return 0;
}

运行结果: