[解決済み] UTF-8の「可変幅エンコーディング」はどのように機能するのですか?
2022-09-03 03:57:54
質問
ユニコード規格には十分な数のコードポイントがあり、それらをすべて格納するためには4バイトが必要です。 これは、UTF-32 エンコーディングが行っていることです。 しかし、UTF-8 エンコーディングは、可変幅エンコーディングと呼ばれるものを使用して、これらをはるかに小さなスペースに押し込んでいます。
実際、US-ASCII の最初の 127 文字を、本物の ASCII とまったく同じように見える 1 バイトで表現することに成功しており、多くの ascii テキストを何もせずに UTF-8 であるかのように解釈することができます。 すてきなトリックですね。 では、どのように動作するのでしょうか。
私はここで自分自身の質問をし、それに答えるつもりです。なぜなら、私はそれを理解するために少し読みましたし、他の誰かの時間を節約できるかもしれないと思ったからです。 それに、もし私が間違っていたら、誰かが訂正してくれるかもしれません。
どのように解決するのですか?
各バイトは、それが1バイトのコードポイントなのか、マルチバイトコードポイントなのか、マルチバイトコードポイントの続きなのかを示す数ビットで始まります。 このように
0xxx xxxx A single-byte US-ASCII code (from the first 127 characters)
マルチバイトのコードポイントはそれぞれ、「私が何であるかを理解するには、次のバイト(または2つ、または3つ)も読む必要があります」と本質的に言ういくつかのビットで始まります。
110x xxxx One more byte follows
1110 xxxx Two more bytes follow
1111 0xxx Three more bytes follow
最後に、これらの開始コードに続くバイトは、すべて次のようになります。
10xx xxxx A continuation of one of the multi-byte characters
最初の数ビットでどのようなバイトかわかるので、どこかで何かがおかしくなっても、シーケンス全体が失われることはないのです。
関連
-
[解決済み] エスケープ文字は何ですか?
-
[解決済み] JSONの文字エンコーディング - UTF-8はブラウザでよくサポートされていますか、それとも数字のエスケープシーケンスを使用すべきですか?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] Zalgoテキストはどのように機能しますか?
-
[解決済み] UTF-8、UTF-16、およびUTF-32
-
[解決済み] 最近のPerlはなぜデフォルトでUTF-8を避けるのですか?
-
[解決済み] Windowsのコマンドラインでunicode文字を使うには?
-
[解決済み】Unicode、UTF、ASCII、ANSIのフォーマットの違いについて
-
[解決済み】なぜBase64を使うのか?
-
[解決済み】UnicodeとUTF-8の違いは何ですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このUnicode結合文字はどうなっているのか、どうすればフィルタリングできるのか?
-
[解決済み] 次の Unicode 文字列 \xe9 は何ですか。
-
[解決済み] ノンチャラクターU+FDD0~U+FDEFは何のためにあるのですか?
-
[解決済み] テキストがボックスで表示されるのはどういう意味ですか?
-
[解決済み] 時間」を表すUnicodeの文字は?
-
[解決済み] 真ん中の大きな弾丸を表すユニコード文字は何になるのでしょうか?
-
[解決済み] ASCIIとUnicodeの違いは何ですか?
-
[解決済み] Windowsのコマンドラインでunicode文字を使うには?
-
[解決済み】Markdownの構文でディレクトリとファイル構造を表現する【終了しました
-
[解決済み】文字列とバイト列の違いは何ですか?