C存储并打印wchar_t

时间:2014-12-12 16:30:58

标签: c wchar-t

我想存储一个带有来自extend ascii table的字符的字符串,然后打印它们。 我试过了:

wchar_t wp[] = L"Росси́йская Акаде́мия Нау́к ";
printf("%S", wp);

我可以编译,但是当我运行它时,我的终端中实际上没有显示任何内容。

你能帮我吗?

编辑:回复此评论:

wprintf(L"%s", wp);

抱歉,我忘了提到我只能使用write(),因为我的第一次尝试只使用printf

2 个答案:

答案 0 :(得分:1)

如果你想要宽字符(每个16位)作为输出,请按照迈克尔的建议使用以下代码:

wprintf(L"%s", wp);

如果你需要utf8输出,你必须使用iconv()进行两者之间的转换。请参阅question 7469296作为起点。

答案 1 :(得分:0)

您需要先调用 setlocale() 并在 %ls 中使用 printf()

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "");
    // setlocale(LC_ALL, "C.UTF-8"); // this also works

    wchar_t wp[] = L"Росси́йская Акаде́мия Нау́к";
    printf("%ls\n", wp);

    return 0;
}

有关 setlocale() 的更多信息,请参阅 Displaying wide chars with printf