为什么在GCC终端中无法正确显示Unicode字符?

Sam*_*mik 3 c unicode gcc

我写了一个小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)

为什么不打印这个角色?

相反,它打印乱码. unicodetest

我检查过:

  • 尝试编译没有setlocale,相同的结果
  • 终端本身可以打印字符,我可以从文本编辑器复制粘贴到终端,它是Ubuntu上的gnome-terminal
  • GCC版本是4.8.2

Con*_*ith 5

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)