【问题标题】:Assigning non-ASCII characters to wide char and printing with printf将非 ASCII 字符分配给宽字符并使用 printf 打印
【发布时间】:2013-02-18 19:58:27
【问题描述】:

如何将非 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。

【问题讨论】:

  • 您没有将其分配给 char,而是将其分配给 wchar_t
  • 如何将字符 'ć' 分配给任何 char、int、变量并正确打印?有可能吗?

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


【解决方案1】:

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

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

【讨论】:

  • 好的,但还是不打印任何字符
  • @balky - 那么您使用的控制台无法正确显示宽字符
  • 你的意思是 windows 控制台窗口?我不明白
【解决方案2】:

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

【讨论】:

  • 你真正想要什么输出?
【解决方案3】:

我认为您对printf() 的调用失败并在errno 中返回了“非法字节序列”错误,至少这是在MacOS X 上使用上述示例代码发生的情况(以及如果使用wprintf() 而不是printf())。对我来说,当我在调用 printf() 之前调用 setlocale(LC_ALL, ""); 时它会起作用,因此它默认停止使用 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。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2017-08-11
    • 2021-04-09
    • 2015-04-11
    • 1970-01-01
    • 2021-05-21
    • 2012-01-17
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多