CロケールがASCIIではなくUTF-8の場合、どのような問題が発生しますか?

CロケールがASCIIではなくUTF-8の場合、どのような問題が発生しますか?

CロケールはASCII文字セットを使用するように定義されており、POSIXはロケールを変更せずに文字セットを使用する方法を提供しません。

CエンコーディングをUTF-8に切り替えるとどうなりますか?

肯定的な側面は、UTF-8がすべてのプロセス(システムデーモンを含む)の基本文字セットになることです。 Cが7ビットASCIIを使用すると仮定しているため、一部のアプリケーションがクラッシュしているようです。ところで、このようなアプリが本当に存在するのでしょうか?最近書かれたコードの多くはある程度ロケールと文字セットを認識しており、これを行うことができるコードを見ると驚くことでしょう。ただ7ビットクリーン入力を処理し、UTF-8サポートを介してCに対応するように簡単に調整することはできません。

ベストアンサー1

C ロケールはデフォルトのロケールではありません。これは「驚くべき」動作が発生しないことを保証する領域です。多くのコマンドは、またはロケールで保証された形式(ヘッダー、形式など)psで出力されます。エンコード()の場合、ASCII文字のみが含まれることが保証されます。ロケール設定が変更されると、多くのアプリケーションが予期せず動作します。たとえば、入力をバイナリデータとして扱うのではなく、誤ったUTF-8で拒否することができます。dfdateCPOSIXLC_CTYPE[:alpha:]C

システム上のすべてのプログラムがUTF-8を使用できるようにするには、デフォルトのロケールをUTF-8に設定します。つまり、単一のエンコーディングで動作するすべてのプログラムです。一部のプログラムはバイトストリームでのみ動作し、エンコードには興味がありません。一部のプログラムは複数のエンコーディングで動作し、ロケールを気にしません。たとえば、WebサーバーまたはWebクライアントは、各接続のヘッダーでエンコードを設定または読み取ります。

おすすめ記事