Cを使用してLinuxターミナルでUnicodeスター文字( x2605 )を印刷しようとしています。サイトの他の回答で提案されている構文に従いましたが、出力が得られません。
#include <stdio.h>
#include <wchar.h>
int main(){
wchar_t star = 0x2605;
wprintf(L"%c\n", star);
return 0;
}
特にncurses
ライブラリでこれを機能させる方法についての提案をいただければ幸いです。
2つの問題:まず、wchar_t
は%lc
ではなく%c
形式で印刷する必要があります。 2つ目は、setlocale
を呼び出さない限り、文字セットが正しく設定されておらず、星の代わりに?
が表示される可能性があることです。ただし、次のコードは機能しているようです。
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
setlocale(LC_CTYPE, "");
wchar_t star = 0x2605;
wprintf(L"%lc\n", star);
}
Stdioまたはncursesのどちらを使用している場合でも、 ncursesマニュアル に記載されているように、ロケールを初期化する必要があります。そうしないと、UTF-8などのマルチバイトエンコーディングが機能しません。
wprintw
は必ずしもwchar_t
について知っているわけではありません(同じ基礎となるprintf
を使用する場合がありますが、これはプラットフォームと構成によって異なります)。
Ncursesを使用すると、次のいずれかの方法でwchar_t
を表示します。