任意の Unicode テキストをラップすることになっている端末 (コンソール) アプリケーションを作成しています。
端末は通常等幅 (固定幅) フォントを使用しているため、テキストを折り返すには、文字数を数え、単語が行に収まるかどうかを確認し、それに応じて動作するだけです。
問題は、端末で 2 文字の幅を占める Unicode テーブルに全角文字があることです。
これらを数えると 1 つの Unicode 文字が表示されますが、印刷された文字は 2 つの「通常の」(半角) 文字幅であり、幅の 2 倍の文字を認識しないため、ラッピング ルーチンが壊れます。
例として、これは全角文字 (U+3004、JIS 記号) です。
〄 12
フォーマット済みですが、ここでは 2 文字の全幅を占有しませんが、端末の西洋文字の 2 倍の幅を使用します。
これに対処するには、全角文字と半角文字を区別する必要がありますが、C++ でそれを行う方法が見つかりません。この問題を回避するには、Unicode テーブル内のすべての全角文字を知る必要がありますか?