2017-05-07 75 views
2

我试图在一个使用C的linux终端中打印一个unicode星号字符(0x2605)。我遵循了网站上其他回答所建议的语法,但是我没有收到输出:在C中打印一个Unicode符号

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

int main(){ 

    wchar_t star = 0x2605; 
    wprintf(L"%c\n", star); 

    return 0; 
} 

我会很感激的任何建议,我尤其是如何能够与ncurses库这项工作。

+0

你对更常见的Unicode字符有麻烦吗? – chux

+1

@chux嗯,我可以打印值为'0x0061'的'a',但不能打印值为'0x01ce'的''。 –

回答

4

两个问题:首先,wchar_t必须打印%lc格式,而不是%c。第二个是,除非你拨打setlocale字符集设置不正确,你可能会得到?而不是你的明星。下面的代码似乎工作,虽然:

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

int main() { 
    setlocale(LC_CTYPE, ""); 
    wchar_t star = 0x2605; 
    wprintf(L"%lc\n", star); 
} 
+0

修复了这个问题,谢谢! ★任何想法如何'mvwprint'这与'ncurses'虽然? –

+0

http://stackoverflow.com/questions/15222466/display-wchar-t-using-ncurses –

1

无论您是使用标准输入输出或ncurses的,你必须初始化语言环境,如ncurses manual指出。否则,多字节编码(如UTF-8)不起作用。

wprintw不一定知道wchar_t(虽然它可能使用相同的底层printf,这取决于平台和配置)。

  • 将它存储在的wchar_t阵列,以及使用waddwstr,或
  • 将其存储在cchar_t结构(具有setcchar):

    随着ncurses的,你就在任何的这些方式显示wchar_t以及使用wadd_wch与作为参数,或

  • 转换wchar_t为多字节串,并使用waddstr
+0

感谢您的答复。我一直得到广义的'ncurses'函数的*隐式声明*错误,还有其他一些库,我需要包括? –

+0

你错过了一个'#define'。通常应该是_XOPEN_SOURCE_EXTENDED',但是大多数平台都有fdear的ifdef:for Linux只使用'-D_GNU_SOURCE'。你必须链接'-lncursesw',但这不是*隐式声明* –

+0

你能解释一下吗? –