CロケールはASCII文字セットを使用するように定義されており、POSIXはロケールを変更せずに文字セットを使用する方法を提供しません。
CエンコーディングをUTF-8に切り替えるとどうなりますか?
肯定的な側面は、UTF-8がすべてのプロセス(システムデーモンを含む)の基本文字セットになることです。 Cが7ビットASCIIを使用すると仮定しているため、一部のアプリケーションがクラッシュしているようです。ところで、このようなアプリが本当に存在するのでしょうか?最近書かれたコードの多くはある程度ロケールと文字セットを認識しており、これを行うことができるコードを見ると驚くことでしょう。ただ7ビットクリーン入力を処理し、UTF-8サポートを介してCに対応するように簡単に調整することはできません。
ベストアンサー1
C ロケールはデフォルトのロケールではありません。これは「驚くべき」動作が発生しないことを保証する領域です。多くのコマンドは、またはロケールで保証された形式(ヘッダー、形式など)ps
で出力されます。エンコード()の場合、ASCII文字のみが含まれることが保証されます。ロケール設定が変更されると、多くのアプリケーションが予期せず動作します。たとえば、入力をバイナリデータとして扱うのではなく、誤ったUTF-8で拒否することができます。df
date
C
POSIX
LC_CTYPE
[:alpha:]
C
システム上のすべてのプログラムがUTF-8を使用できるようにするには、デフォルトのロケールをUTF-8に設定します。つまり、単一のエンコーディングで動作するすべてのプログラムです。一部のプログラムはバイトストリームでのみ動作し、エンコードには興味がありません。一部のプログラムは複数のエンコーディングで動作し、ロケールを気にしません。たとえば、WebサーバーまたはWebクライアントは、各接続のヘッダーでエンコードを設定または読み取ります。