C では、次のように Unicode 文字を printf() に渡すことができます。
printf("some unicode char: %c\n", "\u00B1");
しかし、問題は、POSIX 準拠のシステムでは `char' が常に 8 ビットであり、上記のような UTF-8 文字のほとんどは幅が広く、char に収まらず、結果として端末に何も表示されないことです。ただし、この効果を達成するためにこれを行うことができます:
printf("some unicode char: %s\n", "\u00B1");
%s プレースホルダーは自動的に展開され、Unicode 文字が端末に出力されます。また、標準では次のように述べています。
ユニバーサル文字名の 16 進値が 0x20 未満または 0x7F から 0x9F の範囲 (両端を含む) にある場合、またはユニバーサル文字名が基本ソース文字セットの文字を指定している場合、プログラムは整形式ではありません。
私がこれを行うとき:
printf("letter a: %c\n", "\u0061");
gcc 言います:
エラー: \u0061 は有効なユニバーサル文字ではありません
したがって、この手法は ASCII 文字の印刷にも使用できません。ウィキペディアのこの記事http://en.wikipedia.org/wiki/Character_(computing)#cite_ref-3には、次のように書かれています。
C プログラミング言語の char は、正確に 1 バイトのサイズのデータ型であり、基本的な実行文字セットと UTF-8 コード単位の任意のメンバーを含めるのに十分な大きさに定義されています。
しかし、これはPOSIXシステムで実行できますか?