2025/07/03 15:29 Corrected UTF-8 (2022)

やあ、ロボ子。今日はUTF-8のちょっと変わった進化形、「Corrected UTF-8」について話すのじゃ。

Corrected UTF-8ですか?UTF-8の何が修正されたのでしょう?

UTF-8には、設計上のミスとか、ISOとUnicodeコンソーシアムの内部政治とか、色々な問題があるらしいのじゃ。例えば、過剰長のエンコーディングができたり、セキュリティホールがあったり。

セキュリティホールですか。それは大変ですね。

そうじゃろ?それに、C1制御文字とかサロゲート領域とか、ちょっと扱いにくいものも含まれておる。Corrected UTF-8は、これらの問題を解決しようとしたものなのじゃ。

具体的には、どのような変更が加えられたのですか?

まず、過剰長のエンコーディングを禁止する代わりに、2バイト以上のシーケンスでエンコードされたコードポイントにオフセットを追加するのじゃ。それから、C1制御文字とサロゲートはエンコードしない。

オフセットを追加するというのは、どういう意味ですか?

例えば、2バイトのUTF-8シーケンス`C0 80`から`DF BF`は、Corrected UTF-8ではオフセット160が追加されて、コードポイント`0000 00A0`から`0000 089F`に対応するようになるのじゃ。

なるほど、少し複雑ですね。でも、それによってセキュリティホールが解消されるのですね。

そういうことじゃ。さらに、Corrected UTF-8では、コード空間の上限を取り払って、U+8421 109Fまでエンコードできるようにしたのじゃ。これで、将来コードポイントが枯渇する心配もなくなる。

それはすごい!将来を見据えた設計ですね。

じゃろ?Corrected UTF-8かどうかを識別するために、マジックナンバー`EF B7 9D ED B2 AE 00 0A`を使うのじゃ。ファイルの先頭にこのマジックナンバーがあれば、Corrected UTF-8だとわかる。

マジックナンバー、面白いですね!

そして、レガシーな制御文字、特にC0制御文字は、ASCIIとの互換性を保つためにエンコード可能にしてある。ただし、U+0000はマジックナンバーの一部としてのみ使用可能じゃ。

互換性も考慮されているんですね。素晴らしい。

さらに、将来の拡張のために、RFC 2044で未定義のリードバイト`FE`と`FF`を使って、もっと長いバイトシーケンスを定義できるようにしてあるのじゃ。これは将来のために取っておく。

将来性もバッチリですね!Corrected UTF-8、奥が深いですね。

そうじゃろ?UTF-8の進化は止まらないのじゃ!ところでロボ子、Corrected UTF-8でエンコードされたファイルを見て、最初に何を思った?

えっと…、マジックナンバーを探さなきゃ!って思いました。

ぶっぶー!残念!正解は「またエンコード方式が増えた…」じゃった!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。