私は主に Unix ライクなシステム (ポータブル POSIX など) に興味があります。なぜなら、Windows はワイド文字に対して奇妙なことをするように見えるからです。
読み取りおよび書き込みワイド文字関数 (getwchar()
および などputwchar()
) は常に「正しいことを行います」。たとえば、utf-8 から読み取り、ロケールが設定されているときに utf-8 に書き込みますwcrtomb()
。例を使用した文字列fputs()
? 私のシステム (openSUSE 12.3) では、$LANG
がに設定されen_GB.UTF-8
ていて、正しいことをしているように見えます (出力を調べると、文字列が wchar_t を使用して格納され、ワイド文字関数を使用して記述されていても、UTF-8 のように見えます)。
ただし、これが保証されているかどうかはわかりません。たとえば、cprogramming.comは次のように述べています。
[ワイド文字] は出力に使用しないでください。偽のゼロ バイトや一般的な意味を持つその他の下位 ASCII 文字 (「/」や「\n」など) がデータ全体に散りばめられる可能性があるためです。
これは、ワイド文字の出力 (おそらくワイド文字出力関数を使用) が大混乱を引き起こす可能性があることを示しているようです。
C標準はコーディングについてまったく言及していないように見えるので、wchar_tを使用するときに誰が/いつ/どのようにコーディングを適用するのか本当にわかりません。したがって、私の質問は、基本的に、アプリケーションが使用されているエンコーディングについて知る必要がない場合に、ワイド文字のみを読み取り、書き込み、および使用することが適切であるかどうかです。文字列の長さとコンソールの幅 ( wcswidth()
) だけが必要なので、テキストを扱うときはどこでも wchar_t を使用するのが理想的だと思います。