1. ホーム
  2. string

[解決済み】ユニコード1文字には何バイトかかりますか?

2022-04-18 19:52:03

質問

エンコーディングについて少し混乱しています。私の知る限り、古いASCII文字は1文字に1バイトかかります。Unicodeの文字は何バイト必要なのでしょうか?

1つのユニコード文字に、あらゆる言語のあらゆる可能な文字を含めることができると思いますが、正しいですか?では、1文字あたり何バイト必要なのでしょうか?

また、UTF-7、UTF-6、UTF-16などは何を意味しているのでしょうか。これらはUnicodeの異なるバージョンなのでしょうか?

を読みました。 ウィキペディアのユニコードに関する記事 が、私にはかなり難しいです。簡単な答えを期待しています。

どのように解決するのですか?

簡単な答えがないのです。

まず、Unicodeは、確かに努力はしていますが、すべての言語のすべての文字が含まれているわけではありません。

ユニコード自体はマッピングであり、コードポイントを定義し、コードポイントは番号であり、その番号に関連付けられた 通常 文字です。通常と言ったのは、文字を組み合わせるという概念があるからです。アクセントやウムラウトのようなものに馴染みがあるかもしれません。これらは他の文字と一緒に使うことができ、例えば a または u で新しい論理文字を作成します。したがって、1つの文字は1つ以上のコードポイントから構成されることがあります。

計算機システムで利用するためには、この情報をどのように表現するかを選択する必要があります。それが、utf-8、utf-16le、utf-32などのさまざまなunicodeエンコーディングです。これらは、主にコードユニットの大きさで区別されます。UTF-32は最も単純なエンコーディングで、コードユニットが32ビットであり、個々のコードポイントがコードユニットに無理なく収まることを意味します。他のエンコーディングでは、あるコードポイントが複数のコードユニットを必要としたり、あるコードポイントがそのエンコーディングではまったく表現できなかったりします(これはたとえばUCS-2の問題です)。

文字の組み合わせは自由なので、あるエンコーディングの中でも、文字や正規化形式によって1文字あたりのバイト数が異なることがあります。これは、複数の表現を持つ文字を扱うためのプロトコルです(以下のように言えます)。 "an 'a' with an accent" これは2つのコードポイントであり、そのうちの1つはコンバイニングチャーまたは "accented 'a'" は1つのコードポイントである)。