我的C程序粘贴在下面。在bash中,程序打印“ char is”,不打印Ω。我的语言环境均为en_US.utf8。
#include <stdio.h> #include <wchar.h> #include <stdlib.h> int main() { int r; wchar_t myChar1 = L'Ω'; r = wprintf(L"char is %c\n", myChar1); }
这很有趣。显然,编译器将omega从UTF-8转换为UNICODE,但libc某种程度上将其弄乱了。
首先:%c-format说明符期望一个char(即使在wprintf -version 中也是如此),因此您必须指定%lc(并因此指定%ls字符串)。
%c
char
%lc
%ls
其次,如果您像这样将语言环境设置为运行代码C(它不会自动从环境中获取)。您必须setlocale使用空字符串进行调用以从环境中获取语言环境,因此libc再次感到高兴。
C
setlocale
#include <stdio.h> #include <wchar.h> #include <stdlib.h> #include <locale.h> int main() { int r; wchar_t myChar1 = L'Ω'; setlocale(LC_CTYPE, ""); r = wprintf(L"char is %lc (%x)\n", myChar1, myChar1); }