一尘不染

将wchar打印到Linux控制台?

linux

我的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);
}

阅读 292

收藏
2020-06-07

共1个答案

一尘不染

这很有趣。显然,编译器将omega从UTF-8转换为UNICODE,但libc某种程度上将其弄乱了。

首先:%c-format说明符期望一个char(即使在wprintf
-version 中也是如此),因此您必须指定%lc(并因此指定%ls字符串)。

其次,如果您像这样将语言环境设置为运行代码C(它不会自动从环境中获取)。您必须setlocale使用空字符串进行调用以从环境中获取语言环境,因此libc再次感到高兴。

#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);
}
2020-06-07