C语言 WideCharToMultiByte UTF8 转 GBK
时间: 2024-05-15 20:12:07 浏览: 250
在C语言中,可以使用Windows API函数WideCharToMultiByte来进行Unicode字符集编码的转换。下面是将UTF-8编码的字符串转换为GBK编码的字符串的示例代码:
```c
#include <windows.h>
#include <stdio.h>
int main()
{
char utf8_str[] = "你好,世界!";
int utf8_len = strlen(utf8_str);
// 获取需要的缓冲区大小
int gbk_len = WideCharToMultiByte(CP_ACP, 0, utf8_str, utf8_len, NULL, 0, NULL, NULL);
// 转换为GBK编码
char *gbk_str = (char *)malloc(gbk_len + 1);
memset(gbk_str, 0, gbk_len + 1);
WideCharToMultiByte(CP_ACP, 0, utf8_str, utf8_len, gbk_str, gbk_len, NULL, NULL);
printf("UTF-8: %s\n", utf8_str);
printf("GBK: %s\n", gbk_str);
free(gbk_str);
return 0;
}
```
在上述代码中,我们首先定义了一个UTF-8编码的字符串utf8_str,然后计算出需要的缓冲区大小gbk_len,并分配了相应大小的内存给gbk_str。接下来,我们调用WideCharToMultiByte函数将utf8_str中的数据转换为GBK编码,并将结果存储在gbk_str中。最后,我们输出了转换前后的字符串。
需要注意的是,WideCharToMultiByte函数的第一个参数CP_ACP表示使用系统默认的ANSI代码页(即GBK编码),如果需要转换为其他编码,需要将该参数替换为其他编码的代码页。另外,在实际开发中,需要注意输入字符串的编码格式,以及转换后的字符串是否包含中文字符等问题。
阅读全文