UTFは、Unicodeコードを表すことができるマルチバイトエンコーディングスキームのファミリーです。最大2 ^ 31 [約20億]文字を反復できます。 UTF-8は、1〜4バイトを使用して最初の2 ^ 21 [約200万]コードポイントを表す柔軟なエンコーディングシステムです。
要するに、コードポイント/序数が127未満の任意の文字、別名7ビットセーフASCIIは、他のほとんどのシングルバイトエンコーディングと同じ1バイトシーケンスで表されます。 コードポイントが127を超える文字は、2つ以上のバイトのシーケンスで表され、エンコーディングの特定のものが最もよく説明されていますここ。
ISO-8859は、127から255の範囲で表すことができるアルファベットを表すために使用されるシングルバイトエンコーディングスキームのファミリーです。 これらのさまざまなアルファベットは、ISO-8859- n 形式の「パーツ」として定義されています。これらの中で最もよく知られているのは、[ISO-8859-1](https://en.wikipedia.org/wiki/ISO/ IEC_8859-1)別名「ラテン語-1」。 UTF-8と同様に、7ビットセーフASCIIは、使用されているエンコーディングファミリに関係なく影響を受けません。
このエンコーディングスキームの欠点は、128を超えるシンボルで構成される言語に対応できないこと、または一度に複数のシンボルのファミリを安全に表示できないことです。 同様に、ISO-8859エンコーディングはUTFの台頭により支持されなくなりました。それを担当するISO「ワーキンググループ」は2004年に解散し、維持は親小委員会に委ねられました。
ISO-8859-1は、1980年代に作られたレガシーな規格です。256文字しか表現できないため、欧米の一部の言語にしか適していません。また、多くの言語に対応しているにもかかわらず、一部の文字が欠落しています。このエンコーディングでテキストファイルを作成し、いくつかの中国語の文字をコピー&ペーストしようとすると、奇妙な結果が表示されます。つまり、使うなということです。Unicodeは世界を席巻しており、レガシーな理由(HTTPヘッダなど、あらゆるものと互換性が必要)がない限り、最近ではUTF-8がほぼ標準となっています。
-ASCII:7ビット。 128コードポイント。
-ISO-8859-1:8ビット。 256コードポイント。
-UTF-8:8-32ビット(1-4バイト)。 1,112,064コードポイント。
ISO-8859-1とUTF-8はどちらもASCIIと下位互換性がありますが、UTF-8はISO-8859-1と下位互換性がありません。
#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))
出力:
©
b'\xc2\xa9'
b'\xa9'