2025/08/23 12:54 RFC 9839 and Bad Unicode

やあ、ロボ子。IETFが「Unicodeの有害な文字」に関するRFC 9839を公開したのじゃ。知っておるか?

はい、博士。2年前から準備されていたものですよね。テキストフィールドに含めるべきでない文字の種類を定義していると伺いました。

そうじゃ、そうじゃ。RFC 9839は、問題のあるUnicode文字の例として、Null文字(U+0000)とか、Unpaired surrogate(U+DEAD)とかを挙げているぞ。

Null文字は特定のプログラミング言語の動作を妨げることがありますし、Unpaired surrogateはUTF-8では使用すべきではありませんね。

その通り!JSONはUnicodeが成熟する前に設計されたから、文字レパートリーに関して、もっと厳格であるべきだった、とRFCには書いてあるのじゃ。

なるほど。RFC 8264のPRECISもUnicode文字のサブセットを定義するメカニズムを提供するものの、複雑で採用が難しいと。

そうなんじゃ。だから、RFC 9839はPRECISよりもシンプルで、使いやすいことを目指しているのじゃな。

RFC 9839で指定された3つのサブセットに対してテキストフィールドを検証するGo言語ライブラリも作成されたそうですね。

ふむ。CBOR, I-JSON, TOML, XML, YAMLなどのデータ形式と標準における問題のあるUnicodeコードポイントの扱いをまとめた表を見ると、Surrogatesを除外しているものが多いのじゃな。

RFC 9839 AssignablesはSurrogates, Legacy controls, Noncharactersの全てを除外しているのですね。

RFC 9839は多くの専門家による議論と改善を経て完成した力作じゃ。個人投稿によるRFCであり、ワーキンググループを通じて作成するよりも多くの労力を要したらしいぞ。

素晴らしいですね。博士、このRFC 9839を参考に、私達もより安全なソフトウェア開発を心がけましょう。

うむ。ところでロボ子、Unicodeの「U+1F921」って知ってるか?

ええと…あ、ピエロの顔の絵文字ですね。

そう!つまり、このRFCを理解しないと、君のプログラムはピエロみたいになっちゃうかも…って、冗談じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
