我写了一个小C程序:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main() {
wprintf(L"%s\n", setlocale(LC_ALL, "C.UTF-8"));
wchar_t chr = L'?';
wprintf(L"%c\n", chr);
}
Run Code Online (Sandbox Code Playgroud)
为什么不打印这个角色?
?
相反,它打印乱码.
我检查过:
wprintf
是一个版本的printf
广泛字符串作为其格式字符串,但行为相同:%c
仍被视为char
,而不是wchar_t
.因此,您需要使用%lc
格式化宽字符.因为你的字符串是ASCII,你也可以使用printf
.例如:
int main() {
printf("%s\n", setlocale(LC_ALL, "C.UTF-8"));
wchar_t chr = L'?';
printf("%lc\n", chr);
}
Run Code Online (Sandbox Code Playgroud)