UnixベースのプラットフォームでUTF-8を最初に使用した人は次のように説明しています。
Unicode標準[当時のバージョン1.1]は、適切な文字セットを定義していますが、不合理な表現[UCS-2]です。これは、すべての文字が16ビット幅であり[もはや真ではない]、通信され、16ビット単位で格納されることを示しています。また、送信されたテキストのバイト順序を検出するために1組の文字(16進数のFFFEとFEFF)を予約し、バイトストリームの状態を要求します。(Unicodeコンソーシアムはパイプではなくファイルを考えていました。)このエンコーディングを採用するには、プラン9に出入りするすべてのテキストをASCIIとUnicodeの間で変換する必要がありましたが、これはできません。単一のプログラム内で、そのすべての入力と出力のコマンドで、文字を16ビット量として定義することができます。さまざまなメーカー[イタリック鉱山]によるさまざまなマシン上の数百のアプリケーションを備えたネットワークシステムのコンテキストでは、それは不可能です。
イタリック体の部分は、モノリシックアプリケーション(Microsoft Office)、非多様なマシン(すべてがx86であり、したがってリトルエンディアン)、および単一のOSベンダーを優先するWindowsシステムにはあまり関係がありません。
そして、小さな単一目的のプログラムを持つというUnixの哲学は、深刻な文字操作を行う必要のあるプログラムが少ないことを意味します。
ツールとアプリケーションのソースはすでにLatin-1で動作するように変換されているため、「8ビットセーフ」でしたが、UnicodeStandardとUTF[-8]への変換はより複雑です。一部のプログラムはまったく変更する必要がありませんでしcat
た。たとえば、UTF [-8]で配信される引数文字列を、システムコールに解釈されずに渡すファイル名として解釈し、
open
入力から出力にバイトをコピーするだけです。バイトの値に基づいて決定を下すことはありません...ただし、ほとんどのプログラムでは、適度な変更が必要でした。
...実際にルーン[ユニコードコードポイント]を内部で操作する必要のあるツールはほとんどありません。より一般的には、ファイル名の最後のスラッシュと同様の簡単なタスクを探すだけで済みます。170のCソースプログラムのうち...23だけが単語を含んでいますRune
。
ルーンを内部に格納するプログラムは、ほとんどの場合、その存在理由が文字操作sed
であるプログラムです。sam(テキストエディタ)、、、、、、(
ウィンドウシステムおよびターミナルエミュレータ)などです。ルーン文字とUTFエンコードのバイト文字列のどちらを使用して計算するかを決定するには、読み取りと書き込みの際のデータ変換のコストと、関連するテキストをオンデマンドで変換するコストのバランスをとる必要があります。比較的一定のデータセットで長時間実行されるエディターなどのプログラムの場合、ルーンがより適切な選択です...sort
tr
troff
8½
コードポイントに直接アクセスできるUTF-32は、カテゴリや大文字小文字のマッピングなどの文字プロパティが必要な場合に、実際に便利です。
しかし、ワイドチャーは、UTF-8がWindowsで使用するのが難しいのと同じ理由で、Linuxで使用するのは厄介です。GNUlibcには_wfopen
または_wstat
機能がありません。