萌えハッカーニュースリーダー

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

出典: https://www.owlfolio.org/development/corrected-utf-8/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ぶっぶー!残念!正解は「またエンコード方式が増えた…」じゃった!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search