将非ASCII字符分配给宽字符并使用printf进行打印

时间:2013-03-04 16:40:22

标签: c utf-8 ascii locale wchar-t

如何将非ASCII字符分配给宽字符并将其打印到控制台?此代码不起作用:

#include <stdio.h>
int main(void)
{
    wchar_t wc = L'ć';
    printf("%lc\n", wc);
    printf("%ld\n", wc);
    return 0;
}

输出:

263
Press [Enter] to close the terminal ...

我在Windows 7上使用MinGW GCC。

3 个答案:

答案 0 :(得分:2)

您应该使用wprintf来打印宽字符串:

wprintf(L"%c\n", wc);

答案 1 :(得分:1)

我认为你对printf()的调用因errno中返回的“非法字节序列”错误而失败,至少这是MacOS X上使用上面的示例代码所发生的事情(如果使用的话) wprintf()代替printf())。对我而言,当我在调用setlocale(LC_ALL, "");之前调用printf()以便默认情况下它停止使用C语言环境时,它可以正常工作:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
    wchar_t wc = L'ć';

    setlocale(LC_ALL, "");
    printf("%lc\n", wc);

    return 0;
}

目前还不清楚你所使用的平台/编译器,所以YMMV。

答案 2 :(得分:0)

使用wprintf(&#34;%lc \ n&#34;,wc);你会得到你想要的输出