UTF-8とは何ですか?絵文字とアクセントが余分なスペースを占める理由
UTF-8 は最新の Web を実行するエンコーディングであり、ほぼすべての Web ページ、データベース、API で UTF-8 が使用されています。ほとんどの場合、これは目に見えずに機能しますが、絵文字でいっぱいの短いメッセージが、プレーン テキストの長いメッセージが収まるフィールドに対して「大きすぎる」のはなぜかという、人々を魅了するパズルを説明しています。ここでは、UTF-8 について簡単に説明し、なぜそれが重要なのかを説明します。
UTF-8とは
UTF-8 は、コンピュータが実際に保存および送信する単位であるバイトとしてテキスト文字を表す方法です。入力するすべての文字はバイトのシーケンスになる必要があり、UTF-8 はそれを行うための標準システムです。その賢い設計は、可変幅であることです。文字が異なれば、使用するバイト数も異なります。これにより、平易な英語のテキストをコンパクトに保ちながら、あらゆる言語のあらゆる文字と絵文字を表すことができます。それが一般的なテキストにとって普遍的かつ効率的であるという理由から、まさに主流のエンコーディングとなっています。
一部の文字がより多くのバイトを必要とする理由
ここが重要なアイデアです。 UTF-8 では、基本文字、英字、数字、および一般的な句読点に 1 バイトが使用されます。しかし、その基本セット以外の文字はさらに時間がかかります。ほとんどのアクセント付きラテン文字と多くの記号は 2 バイト、中国語、日本語、韓国語の文字を含む広範囲の文字は 3 バイト、そしてほとんどの絵文字を含む残りの文字は 4 バイトかかります。したがって、テキストのバイト サイズは、テキストに含まれる文字によって完全に異なります。普通の英語は 1 文字あたり 1 バイトです。絵文字は4つです。
これが制限にとって重要な理由
可変幅は、文字数とバイト数が異なる理由と、それが重要である理由です。多くの制限、データベース フィールド、ネットワーク ペイロード、一部の API リクエスト サイズは、文字数ではなくバイト単位で測定されます。 100 バイトを保持するフィールドには 100 の普通の英語文字が収まりますが、2 バイトのアクセント付き文字の場合は 50 文字、4 バイトの絵文字の場合は 25 文字のみです。これがまさに、見た目が短く、絵文字が多用されたメッセージが長すぎるとして拒否される理由となりますが、より長いプレーンテキスト メッセージは適合します。文字ではなくバイトが制限に達します。
絵文字サプライズ
絵文字は最も混乱を引き起こすため、特に注意が必要です。ほとんどの絵文字は UTF-8 では 4 バイトで、普通の文字 4 つと同じくらいのスペースです。また、一部の絵文字は、いくつかのコード ポイントを組み合わせて構築されます。国旗、肌色のバリエーション、または家族の絵文字は、多くのバイト、場合によっては 12 バイトを超える場合があります。そのため、表示される 1 つの絵文字が、見た目よりもはるかに多くのスペースを占有する可能性があります。絵文字だらけの短いメッセージが長すぎるという理由で拒否された場合、この可変幅のマルチバイトの現実が原因です。
実践的なポイント
UTF-8 について直接考える必要はほとんどありませんが、UTF-8 について知っておくと実際の動作が説明されます。文字数制限がある場合は文字数をカウントします。バイト単位の場合、多くの技術的な文脈では、アクセントは 2 倍、絵文字は 4 倍のバイト コストになることに注意してください。そのため、テキストが平易な英語でない場合は、実際のバイト サイズを確認してください。文字数とバイト サイズの両方を一度に確認できるため、推測に頼る必要がなくなり、「でも十分短そうだった」という紛らわしい拒否反応を防ぐことができます。