C语言 WideCharToMultiByte UTF8 转ASCII
时间: 2024-05-15 21:12:07 浏览: 160
可以使用 WideCharToMultiByte 函数将 Unicode 编码的字符串转换为 ASCII 编码的字符串。UTF-8 是 Unicode 的一种编码方式,因此可以将 Unicode 编码的字符串转换为 UTF-8 编码的字符串,然后再将 UTF-8 编码的字符串转换为 ASCII 编码的字符串。
以下是一个示例代码:
```c
#include <stdio.h>
#include <windows.h>
int main()
{
WCHAR unicodeStr[] = L"这是一个Unicode编码的字符串";
int unicodeLen = wcslen(unicodeStr);
int utf8Len = WideCharToMultiByte(CP_UTF8, 0, unicodeStr, unicodeLen, NULL, 0, NULL, NULL);
char* utf8Str = (char*)malloc(utf8Len + 1);
WideCharToMultiByte(CP_UTF8, 0, unicodeStr, unicodeLen, utf8Str, utf8Len, NULL, NULL);
utf8Str[utf8Len] = '\0';
int asciiLen = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)utf8Str, -1, NULL, 0, NULL, NULL);
char* asciiStr = (char*)malloc(asciiLen + 1);
WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)utf8Str, -1, asciiStr, asciiLen, NULL, NULL);
asciiStr[asciiLen] = '\0';
printf("Unicode string: %ls\n", unicodeStr);
printf("UTF-8 string: %s\n", utf8Str);
printf("ASCII string: %s\n", asciiStr);
free(utf8Str);
free(asciiStr);
return 0;
}
```
在示例代码中,首先将 Unicode 编码的字符串转换为 UTF-8 编码的字符串,然后再将 UTF-8 编码的字符串转换为 ASCII 编码的字符串。注意,必须在最后一个参数传入 NULL,以便 WideCharToMultiByte 函数自动计算缓冲区的大小。还需要注意,ASCII 编码是单字节编码,因此需要在 WideCharToMultiByte 函数的第一个参数传入 CP_ACP,表示使用当前系统的 ANSI 代码页进行编码。
阅读全文