解决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;
}
运行结果: