UTF-8とISO-8859-1の違いは何ですか?
UTF-8とISO-8859-1の違いは何ですか?
回答:
UTF-8は、任意のUnicode文字を表すことができるマルチバイトエンコーディングです。ISO 8859-1は、最初の256個のUnicode文字を表すことができるシングルバイトエンコーディングです。どちらもASCIIをまったく同じ方法でエンコードします。
ウィキペディアは、UTF-8とLatin-1(ISO-8859-1)の両方について、かなりよく説明しています。前者は可変長エンコーディングで、後者は1バイト固定長エンコーディングです。Latin-1はUnicode文字セットの最初の256個のコードポイントのみをエンコードしますが、UTF-8はすべてのコードポイントのエンコードに使用できます。物理エンコードレベルでは、コードポイント0〜127のみが同じようにエンコードされます。コードポイント128〜255は、UTF-8では2バイトシーケンスになることで異なりますが、Latin-1では1バイトです。
UTFは、最大2 ^ 31 [約20億]文字を表すことができるUnicodeコードポイントを表すことができるマルチバイトエンコーディングスキーマのファミリです。UTF-8は、最初の2 ^ 21 [約200万]コードポイントを表すために1〜4バイトを使用する柔軟なエンコーディングシステムです。
長い話:コードポイント/序数表現が127未満の文字、つまり7ビットセーフASCIIは、他のほとんどのシングルバイトエンコーディングと同じ1バイトシーケンスで表されます。コードポイントが127を超える文字は、2バイト以上のシーケンスで表されます。ここでは、エンコードの詳細を説明します。
ISO-8859は、フォーマットの「部」として定義されている127〜255これらの様々なアルファベットの範囲内で表すことができるアルファベットを表すために使用される単一のバイトコード化スキームのファミリーであるISO-8859- Nの最も身近これらはおそらくISO-8859-1(別名 'Latin-1')です。UTF-8と同様に、7ビットセーフのASCIIは、使用されるエンコードファミリに関係なく影響を受けません。
このエンコード方式の欠点は、128を超えるシンボルで構成される言語に対応できない、または一度に複数のシンボルファミリを安全に表示できないことです。同様に、ISO-8859エンコーディングは、UTFの台頭に伴い好まれなくなりました。それを担当するISO「ワーキンググループ」は2004年に解散し、親の小委員会にメンテナンスを任せています。
ISO-8859-1は、1980年代のレガシー規格です。256文字しか表現できないため、西側世界の一部の言語にのみ適しています。サポートされている多くの言語であっても、一部の文字が欠落しています。このエンコーディングでテキストファイルを作成し、一部の漢字をコピー/貼り付けしようとすると、奇妙な結果が表示されます。つまり、使用しないでください。Unicodeが世界を席巻し、UTF-8は、いくつかのレガシーな理由(HTTPヘッダーなど、すべてと互換性が必要なもの)がない限り、最近の標準になっています。
もう1つ重要なことを理解してください。表示されている場合iso-8859-1
、それはおそらくISO / IEC 8859-1ではなくWindows-1252を指しています。それらは0x80〜0x9Fの範囲で異なります。ISO8859-1にはC1制御コードがあり、Windows-1252には代わりに便利な表示文字があります。
たとえば、ISO 8859-1には0x85の制御文字(UnicodeではU + 0085、 ``)があり、Windows-1252には水平の省略記号(UnicodeではU + 2026 HORIZONTAL ELLIPSIS、 …
)があります。
WHATWGエンコーディング仕様は、(HTMLで使用されるような)明示的宣言しないiso-8859-1
ためのラベルであることをwindows-1252
、およびWebブラウザは、どのような方法でISO 8859-1をサポートしていません。これ以上HTMLの仕様は、エンコードスペックのすべてのエンコーディングがサポートされなければならないと言うと、 。
また興味深いことに、HTMLの数字参照は、基本的に、Unicodeコードポイントではなく、8ビット値にWindows-1252を使用します。あたりにhttps://html.spec.whatwg.org/#numeric-character-reference-end-state、…
U + 2026ではなくU + 0085を生成します。
この質問を研究した理由は、それらがどのように互換性があるかという観点からでした。Latin1文字セット(iso-8859)は、utf8データストアに格納するために100%互換性があります。すべてのASCIIおよび拡張ASCII文字は、1バイトとして格納されます。
逆に言えば、utf8からLatin1の文字セットは機能する場合と機能しない場合があります。2バイト文字(extended-ascii 255を超える文字)がある場合、それらはLatin1データストアに格納されません。