UTF-8/UTF-16/UTF-32 を処理系の内部エンコーディングに使う場合のそれぞれのメリット

ごく最近調べて実装したり、人に聞いたメモなので間違っていたらぜひ御指摘を。

UTF-8

ascii が 1byte で ascii に一致する。
これが大きい。
処理系が実装されている C のコードで、絶対に ascii だと分かっている変数にたいして、標準C関数を使いまくれるのがうれしい。
文字列リテラルも可搬性を維持したまま使える。

strcmp("hige-func", hoge)

これが UTF-32 だったら、たとえ全てが ascii と分かっていても専用の関数(ブリッジ?)を作らないと行けない。
fopen とか。

あとはasciiばかりの場合には効率が良いとか。

UTF-16

2byteに収まる。
サロゲートペアの部分なんか気にしないぜと男気を見せれば、完全2byteの世界になること。

UTF-32

完全 4byte 固定なので処理がとても楽。*1
L"abあ" は、何文字?何バイト?というのがすぐ分かるのはとても大きい。
また仕様的にしばらくは安泰という安心感がある。


こんな感じでしょうか。

*1:UCS4は31bitですよとか、厳密には21bitですよとかの御指摘をいただきました