私のシステム、かなり普通の Ubuntu 13.10 では、フランス語のアクセント付き文字「éèàçù...」は、LC_ 環境変数が en_US.UTF-8 に設定されていても、使用するツールによって常に正しく処理されます。特に、grep、cat などのコマンド ライン ユーティリティでは、常にこれらの文字を問題なく読み取り、出力します。
これらの発言にもかかわらず、このような小さなプログラム
int main() {
printf("%c", getchar());
return 0;
}
ユーザーが「é」を入力すると失敗します。
manページと多くのグーグルから、stdoutを閉じてから再度開く標準的な方法はありません。man fwide() から、stdout がバイト モードの場合、それを閉じて再度開く以外にワイド文字モードに渡すことはできません... したがって、getwchar() と wprintf() は使用できません。
cat、grep などのすべてのユーティリティがワイド文字を管理する方法を再実装しているとは信じられませんが、私の調査では、他に方法はありません。
問題があるのは私のシステムですか?すべてのユーティリティが完璧に機能するため、方法がわかりません。何が欠けていますか?