blog

文字エンコーディング

全文リンク\n\n文字エンコーディング\n文字エンコーディング\n文字エンコーディング\n文字エンコーディング\n簡体字中国語文字エンコーディングの進化\n開発の概要\n\nコンピュータが日本に導入さ...

Apr 18, 2020 · 22 min. read
シェア

文字エンコーディングの顔では、様々な情報やwikiのクエリの後、要約するノートを書きたい、半ばは兄が より良い要約を行っていることがわかりました書き込みます。だから私はここに直接抜粋再現オーバー、最適化と補足のいくつかの詳細があるでしょう、アイデアを明確にするために、単語ごとに読んで、いつでも相談してください。リンクは、ウィキペディアの多くを持って、科学を開く必要があります。

1つの記事で "文字エンコード "の体系的な理解に向けて、もはや苦しんでいません

全文リンク:

序文

文字エンコーディングは、コンピュータの世界で最も基本的かつ重要なトピックの1つです。しかし、コンピュータの教科書では読み飛ばされることが多く、これを専門に扱った本は一冊もありません。プログラミングの実践では、問題の内実、過去と現在を徹底的に明らかにする文字エンコーディングの死の霊の終わりの精神を持ち越さないならば、それは幽霊の余韻のようなもので、その結果、生と死に苛まれた出来事の「霊」に関連するさまざまな文字エンコーディングが発生します。

文字エンコーディングは、主にその広範に反映され、基本的かつ重要です。ダウンコンピュータに関わる基礎技術、さらにはハードウェアの実装に、最大ほぼすべてのオペレーティングシステム、プログラミング言語、アプリケーションが密接に関連しています。

文字エンコーディングと同様に、このような基本的な、重要な、広く使用され、特に混同しやすいバイトオーダー正規表現だけでなく、浮動小数点の実装日付と時刻の処理などの件名。その中でも、バイトオーダー、正規表現と文字エンコーディングとの密接な関係、特にバイトオーダーは、直接文字エンコーディングのバイト列に影響を与えます。正規表現は主に文字列中の文字や部分文字列を検索・抽出するために使用されるため、正規表現を真に理解するためには、文字エンコーディングを深く理解することとも切り離せません。

主要な用語

文字エンコーディングの問題を本当に理解するためには、 ビットバイト文字セット文字エンコーディングなどのコンピュータの基本概念から始めなければなりません。

開発の概要

ビット(bit)は、バイナリビット、ビット、ビットとも呼ばれ、コンピュータにおける情報表現の最小単位である2進数の1ビットを指します。

ビットは、数学者ジョン・ワイルダー・チューキー(John Wilder Tukey)が作った2進数(Binary digit)の合成語。この用語が初めて正式に使われたのは、シャノンの有名な論文『通信の数学理論』p.1。例えば、8ビットは8bと表記できます。

各ビットには0と1という2つの可能な値があり、値そのものに加えて表現することができます:

  • 正の値と負の値;
  • ライトの点灯と消灯、電線の電流の有無など、2つの状態;
  • 抽象的な論理の「はい」と「いいえ」、または「真」と「偽」。

GB 2312

コンピュータでは、ビット列と呼ばれるビット列を使用するのが一般的です。もちろん、どのような長さのビット列でも使用できるコンピュータシステムはなく、特定の長さのビット列を使用します。

ビット列の長さの一般的な形式には、合意された名称があります。たとえば、4ビットの組み合わせをハーフバイト、8ビットの組み合わせをバイト、ワード、ダブルワード、クワッドワード、クロスセクションなどです。

バイトは、香港、マカオ、台湾でもビットセットとして知られている、"バイト "と発音され、ストレージ容量と測定の基本単位の伝送容量の測定のコンピュータであり、ビット列のビットの連続した固定数で構成され、一般的に8ビットで構成され、つまり、1バイト= 8ビット。Bなので、1B=8bとも表現できます。

現代のパーソナル・コンピュータのメモリ・アドレッシングは、一般にバイト・アドレッシングと呼ばれるバイトを単位としているので、バイトは一般にメモリへのアクセスの最小単位であり、プロセッサの最小アドレッシング単位です。

バイトは、メモリの最小アクセス単位とプロセッサの最小アドレス指定単位として、この重要な特徴は、関係の文字エンコーディングと非常に近いですが、例えば、シングルバイトとマルチバイトのコード要素、ビッグエンドシーケンスとスモールエンドシーケンスのバイト順序など、密接にバイトベースの基本的なデータ型に関連している(本文の後半部分の導入を参照してください)

バイト上のビットの順序は、下図に従って、すなわち、最下位ビットから最上位ビットに向かって右から左の順に並べるのが通例です:

例えば、IBM 701、IBM 702、CDC 6600などです。ただ、最近のコンピュータのデファクトスタンダードは、8ビットで1バイトを表現することです

このため、より厳密な技術仕様の文献の多くでは、曖昧さを避けるために8ビットの文字列を強調するために、バイトという用語よりも 8ビットグループという用語が好まれています。

しかし、一般大衆は基本的にバイトを8ビットのグループとして理解しているため、特に指定がない限り記事では8ビットグループをバイトと呼ぶか、一般的にバイトを8ビットグループと呼ぶのが一般的です。

ps: 以下の記事では、ハイビット、最高ビット、ハイバイト、ロービット、最低ビット、ローバイトなどの用語が頻繁に登場しますが、「ハイ」と「ロー」は相対的な概念です。人間の読み書きの習慣に合わせて、2進数は左から右に数えて、左が高く、右が低い。詳しい説明は、1.7 バイト順序を参照してください。

全角、半角

バイトは、現代のほとんどのコンピュータにおいて、記憶と伝送の最小単位ですが、コンピュータが処理できるデータの最も効率的な単位であることを意味するものではありません。

一般的に、コンピュータが最も効率的に処理できるデータのサイズは、ワード長と同じであるべきです。

  • ISO 2022:コンピュータでは、ビット列が全体として処理または操作され、このビット列をコンピュータ・ワード(略してワード)と呼びます。ワードは通常いくつかのバイトに分割されます。
  • ワードの長さ:ワードの長さは、コンピュータの各ワードに含まれるビット数です。ワードの長さによって、CPUが1回の操作で処理する実際のビット数が決まります。ワード長は、CPUの外部データパスのデータバスの幅によって決まります。

コンピュータがデータを処理できる速度は、一度に処理できるビット数と、演算を実行できる速さに明らかに関係しています。あるコンピュータのワード長が別のコンピュータのワード長の2倍で、2つのコンピュータの速度が同じであれば、一般に前者は同じ時間で後者の2倍の仕事ができます。したがって、単語の長さとコンピュータの機能と用途には大きな関係があり、コンピュータの重要な技術的指標です。

現在、デスクトッププラットフォームのプロセッサのワード長は32ビットから64ビットへの移行期にあり、組み込みデバイスは基本的に32ビットで安定しており、一部の専門分野では、プロセッサのワード長は64ビットまたはそれ以上の128ビットに達しています。

GBK

文字エンコーディングの本質は、文字とバイナリ間のマッピングですが、バイナリは、人間が覚えてあまりにも直感的であり、表現の進化の人間の理解と記憶にもっと資する他のものがあります。コンピュータサイエンス以外の学生は、一般的に使用されているバイナリシステム自体の意味と、それらが異なる環境、システム、言語でどのように表現されているかを理解する必要があります。

累進システムは、四捨五入された計数システムとしても知られており、人間が定義した四捨五入による計数方法です。 どのような種類の10進法でも、X進法とは、各位置の数字をXごとに1位ずつ数えることを意味します。 10進法では10進数1個、16進法では16進数1個、2進法では2進数1個というように、X進法では10進数1個となります。

20Hの理由を追加

数学とデジタル回路では、GB2進数である基底2進数体系を指します。このシステムでは通常、0 と 1 という 2 つの異なる記号が使用されます。デジタル電子回路における論理ゲートの実装は、2進数の直接的な応用であり、そのため最新のコンピュータやコンピュータに依存するデバイスで使用されています。各数値はビットと呼ばれます。

2進数はコンピュータで使用される最も基本的な言語となっており、0と1があらゆる場所で使用されています。

コンピュータが2進数を使用する理由はいくつかあります:

まず、2進数の計数システムでは0と1の2桁しか使用しないため、2つの異なる定常状態を持つ任意のコンポーネントを、数値のビットを表現するために使用することができます。そして実際には、2つの異なる定常状態を持つ多くのコンポーネントがあります。例えば、ネオンランプの "オン "と "オフ"、スイッチの "オン "と "オフ"、電圧の "ハイ "と "ロー"、"プラス "と "マイナス"、"プラス "と "マイナス"、紙テープの "穴 "と "穴なし"「回路における「信号」と「信号なし」、磁性体の南極と北極など。 これらの異なる状態を用いて数字を表現することは簡単です。それだけでなく、より重要なことは、2つの異なる状態の間には量的な違いだけでなく、質的な違いもあるということです。これにより、機械の干渉防止能力が大幅に向上し、信頼性が向上します。2つ以上の状態を表すことができ、シンプルで信頼性の高い装置を見つけることは、はるかに困難です。

第二に、四則演算の二進法の数え方は非常に単純です。そして、四則演算は最終的に加算とシフトに減らすことができるので、電子計算機の演算線も非常に単純になりました。それだけでなく、ラインも単純化され、スピードも上げることができます。これはまた、10進数のカウントシステムを比較することはできません。

第三に、電子計算機の2進表現の使用は、機器を節約することができます。トリプルビット方式が最も機器を節約でき、次に2進法であることは理論的に証明できます。しかし、2進法には3進法を含む他の方式にはない利点があるため、電子計算機の多くは今でも2進法を採用しています。また、2進法では" 0 "と" 1 "の2つの記号しか使用しないため、ブール代数を使用して機械の論理回路を分析・合成することができます。 これは、電子コンピュータ回路を設計するための有用なツールとなります。

80Hの理由を追加

GB 1322、Octal、OCTまたはOと略される8進数は、0、1、2、3、4、5、6、7を8桁とし、8桁目はすべて1に丸められるベース8の数え方です。一部のプログラミング言語では、数字が8進数であることを示すために0から始まることがよくあります。8進数と2進数はビット単位で対応できるため、コンピュータ言語ではよく使われます。

8進数表現はコンピュータシステムでは一般的なので、時々使われているのを見かけます。16進数1ビットが2進数4桁に対応できるので、2進数を16進数で表現する方が便利です。そのため、8進数は16進数よりもあまり使われません。8進数表記を使って数値を表現する機能を提供するプログラミング言語もありますし、古いUnixアプリケーションの中には8進数を使っているものも残っています。

プログラミング言語では、8進数の文字は通常、数字の0、文字のoやq、0o、記号の&やドルなど、さまざまな接頭辞と組み合わされます。

たとえば、73 という文字は、さまざまな言語で 073、o73、q73、0o73、˶73、&73、$73、73o と表せます。

新しい言語では接頭辞0を削除しています。これは、文字oと数字0が誤認されやすく紛らわしいためです。一般的には接頭辞0oが使われます。

0o ECMAScript 6、C、Python 3.0、Ruby など。

未解決の質問

GB 1322、数学における16対1のシステムのこと。一般に0~9の数字とA~Fの文字で表され、A~Fは10進数で10~15に相当し、これを16進数と呼びます。

例えば、10進数の57は2進数では111001、16進数では39と表記されます。

現在では、4ビットを個々の16進数に変換するのがそれほど難しくないため、コンピュータでは16進数がよく使われています。しかし、この混在した表現は混乱を招き、いくつかの接頭辞、語尾、添え字が必要になります。

コンピュータシステムやプログラミング言語によって、16進数を表現する方法は異なりますが、16進数を表現する最も一般的な方法は、数字の前に 0xを 付けるか、数字の最後に小さな文字 16を付けることです。

C、C++、Shell、Python、Java、その他の類似言語では、"0x "という接頭辞が使われます。最初の "0 "はパーサーが数字を認識しやすくし、"x "は16進数を表します。0x "の "x "は大文字でも小文字でもかまいません。

システム間の変換は自明です。

GB 18030

文字、イメージ、音声、その他のオブジェクトを、あらかじめ指定された方法で所定の電気インパルス信号または2進数に変換するなど、情報をある形式から別の形式に半角するプロセス。

CP94536):エンコーディングの逆プロセス。

GB 13000

文字セットとは、文字通り文字の集合で、自然言語の文字システムがサポートするすべての文字の集合です。文字とは、単語、数字、文字、音節、句読点、図形記号など、さまざまな単語や記号の総称です。

例えば、ASCII文字セットは128文字を定義しており、GB2312文字セットは7445文字を定義しています。一方、キャラクタ・セットとは、番号付けされたキャラクタの集合を指します。

一般的な文字セットには、ASCII文字セット、ISO 8859シリーズ文字セット、GBシリーズ文字セット、BIG5文字セット、Unicode文字セットなどがあります。

CJK

GB 03100文字セットコードとも呼ばれ、文字セット内の文字を特定の方法で特定のセット内のオブジェクトに符号化するプロセスです。

つまり、文字セットと指定されたセットの両方のプロセスの間の対応を確立するために。これは、情報処理の基本的な技術です。

したがって、文字は通常、文字セットの観点から定義され、コンピュータベースの情報処理システムは、文字を表現し、格納し、処理するために電子部品の異なる状態の組み合わせを使用します。

電子部品の異なる状態の組み合わせは、デジタルシステムで数値を表すことができるため、文字符号化のプロセスは、文字をコンピュータに受け入れられる2進数に変換してマッピングするプロセスとして理解することができ、これによりコンピュータでの文字の表現、保存、処理、および伝送が容易になります。

一般的な例は、一般的に使用されているラテンアルファベットをモールス符号と ASCII符号に符号化したものです。この場合、ASCIIは文字、数字、その他の記号に番号を付け、この番号を7ビットの2進数としてコンピュータで直接表現します。多くの場合、コンピュータ・システムがデータを正確に1バイトで処理、保存、送信できるように、最上位ビットに拡張ビット「0」が追加されます。

概要 GBシリーズ

文字符号化モデル。文字符号化システムの構造的特徴と構成要素の相互関係を反映したモデリングの枠組み。

歴史的な理由から、文字集合と文字符号化は一般的に初期には同義と考えられており、厳密に区別する必要はありませんでした。したがって、ASCII などの単純な文字セットに代表される伝統的な文字符号化モデルでは、これら 2 つの概念の意味はほぼ等価です。

なぜなら、伝統的な文字符号化モデルでは、基本的に文字セット内の文字に番号が振られ、その文字番号が文字の符号化だからです。

現代の文字エンコーディング・モデル

UnicodeやUniversal Character Set (UCS)に代表される現代の文字符号化モデルは、ASCIIのような単純な文字集合の符号化の考え方をそのまま採用しているのではなく、まったく新しい符号化の考え方を採用しています。

この新しい符号化の考え方は、文字集合と文字符号化の概念をより詳細に以下のような側面に分解しています:

  • 文字とは何か
  • これらの文字の番号は何ですか;
  • これらの数字がどのように論理レベルの有限サイズの数字の列、すなわちコード要素の列に符号化されるか;
  • 論理レベルのコード・エレメントのシーケンスが、物理レベルのバイト・シーケンスに変換される方法;
  • いくつかの特殊な伝送環境では、バイト列は適応符号化によってさらに処理されます。

これらの側面が全体として、ISO/IEC 60146.

現代の文字エンコーディングモデルが多くの側面に分かれている理由の核となる考え方は、さまざまな方法でエンコードできる普遍的な文字セットを作成することです。ここでのキーワードに注意してください。

つまり、同じ文字セットをさまざまなエンコーディング方式に一般化できる、つまり、同じ文字セットをエンコードするのに異なるエンコーディング方式を使用できるということです。文字セットとエンコーディング方法の関係は、一対多の関係になります。

さらに、従来の文字エンコーディングモデルでは、文字エンコーディング方法と文字セットは緊密に結合していますが、最新の文字エンコーディングモデルでは、文字エンコーディング方法は文字セットから切り離されています。ソフトウェア工学の用語では、緊密に結合された文字エンコード方法が文字セットから切り離されることを意味します。

したがって、この最新の文字エンコーディング モデルを正しく表現するには、「文字セット」や「文字エンコーディング」よりも正確な概念用語が必要です。

DBCS 第17号「UNICODE CHARACTER ENCODING MODEL」では、現代の文字エンコーディングモデルを5つのレベルに分け、それらを説明するためにより多くの概念用語を導入しています:

  • レイヤ1、抽象文字リスト ACR: 明示的な文字の範囲;
  • レイヤー2、番号付き文字セット CCS:文字を表すための数値番号;ps:これは現代の文字符号化モデルにおける「文字セット」です。
  • レイヤ3、文字符号化モード CEF: コード要素の論理シーケンスとして文字番号を符号化。
  • レイヤ4、文字符号化モードCES:符号要素の論理シーケンスをバイトの物理シーケンスにマッピング。
  • ps: ネットワーク伝送のためのローカル・バイト・ストリームの特殊エンコーディング。

ps:以下は、5つのレベルの詳細な説明の近代的な文字エンコーディングモデルです、私はあなたが最初にこの段落をスキップし、テキストを読んでから、テキスト全体のアイデアを理解するために戻って読むことをお勧めします。

ワードバンク、ワードタッチバンク

抽象文字テーブルACRは 、すべての抽象的な文字のコレクションをサポートするための符号化システムであり、単純に文字の範囲を決定するために使用される、順序付けされていない文字のコレクションとして理解することができる、つまり、どの文字をサポートするために。

ACRの重要な特徴は、文字が順序付けされていないことです。つまり、文字には数値的な順序はなく、数値的な番号付けもありません。

「抽象" キ ャ ラ ク タ は特定のグ リ フ を持たず、 特定のグ リ フ を持つ"具象" キ ャ ラ ク タ と 混同 し ないで く だ さ い。

文字表は、ASCII文字表やISO/IEC 8859シリーズのように、新しい規格が作成されない限り新しい文字を追加できないという意味でクローズドであることもあれば、ユニコード文字表やある程度のコードページのように、継続的に新しい文字を追加できるという意味でオープンであることもあります。

番号付き文字セット CCS

前述のように、抽象文字テーブルの文字は順序付けされていませんが、順序付けされていない抽象文字テーブルでは、ある文字が特定の文字テーブルに属するかどうかを判断できるだけで、その文字テーブルの特定の文字を便利に参照したり、参照したりすることはできません。

文字テーブル内の文字をより簡単に参照、参照するためには、抽象文字テーブル内の各文字に番号を付ける必要があります。

いわゆる文字番号付け、つまり、抽象文字テーブルACRの各抽象文字を非負整数Nで表すか、座標にマッピングします。つまり、抽象文字の集合を非負整数または非負整数値のペアの集合にマッピングし、マッピングの結果を番号付き文字セットCCSとします。 したがって、文字の番号はその文字の非負整数コードでもあります。

たとえば、ある抽象文字テーブルでは、大文字のラテン文字 "A" を表す文字には非負整数 65 が割り当てられ、文字 "B" には 66 が割り当てられます。

このことから、コードスペース(Code Space、一般に符号空間、符号空間、符号点空間と訳される )という概念が生まれます。抽象文字テーブルの抽象文字の数に応じて、文字数の上限を設定することができ、0から非負整数範囲の上限値までを数空間と呼びます。

番号空間の説明

  1. 例えば、GB2312漢字の番号空間は94 x 94です;

  2. また、非負の整数で記述することもできます。例えば、ISO-8859-1の番号空間は256です;

  3. 例えば、ISO-8859-1は8ビットの番号空間です;

  4. また、行、列、面などのサブセットで記述してもよい。

番号空間内の位置はコードポイントまたはコードビットと呼ばれます。文字はコードポイントがある座標を占めるか、非負の整数を表します。

しかし、**厳密に言えば、文字番号はコードポイント番号と全く同じではありません。**番号付き文字セット CCS のコードポイント数は、実際には、何らかの特別な理由により、抽象文字テーブル ACR の文字数よりも大きいからです。

番号付き文字集合では、文字コードポイントの他に、非文字コードポイントや予約コードポイントも存在するので、文字ナンバリングはコードポイントナンバリングほど正確ではありませんが、文字コードポイントのコードポイントナンバリングを文字ナンバリングと呼ぶことにすれば、より直接的です。

Unicodeの符号化方式では、文字符号点は Unicodeスカラー値とも呼ばれ、非文字符号点や予約符号点については後述します。

**コードポイント」と言うときは、コード番号のことかもしれません。コード・ポイント」と言う場合、番号空間の位置、つまりコード・ポイントについて言っている場合もあれば、あるコード・ポイントのコード・ポイント値、つまりコード・ポイント番号について言っている場合もあります。具体的な意味は文脈によって異なります。

この類似の参照は非常に一般的で、別の例としては、「文字セット」、「文字番号」、「文字エンコーディング」、これら3つの概念が互いに参照されることがよくあります。コードポイント "は "コードポイント値 "を指し、文脈に応じて、それは理解することは困難ではありません。しかし、"文字セット"、"文字番号 "と "文字エンコーディング "もしばしば互いに参照され、どうしようもない歴史的な理由があるが、現在の実際の状況は、その結果、人々を混乱させることです、人が狂ってみましょう!

したがって、いわゆる番号付き文字セットは、単純に抽象的な文字が1つずつ番号付けされているか、結果の後に1つずつコードポイント値にマッピングされているとして理解することができます。

番号付き文字セットCCSは、多くの場合、単に文字セットと呼ばれています。

番号付き文字集合CCSと抽象文字表ACRを混同しないように注意してください。複数の異なる番号付き文字集合CCSは、同じ抽象文字表ACRを表すことができます。言い換えれば、同じ抽象文字表ACRは、異なる番号付け規則に従って複数の異なる番号付き文字集合CCSに番号付けすることができます。

Unicode標準では、1つの抽象文字が複数のコードポイントに対応することがあります(他の標準との互換性を保つために、例えば、コードポイントU+51C9とU+F979は実際には同じ文字「凉」であり、これは韓国語文字集合標準KS X 1001: 1998と互換性を保つためです。1998、ロケール コード参照)、または複数のコードポイントからなるコードポイント列です。同時に、すべてのコードポイントが文字に対応するわけではなく、非文字コードポイントや予約コードポイントもあります。説明については後述します。

特記事項:"番号"は文字符号化方式であるCEFでは "符号"に、文字符号化モードであるCESでは "符号"に対応しますが、**"番号 "はCESでは "符号 "に、**"番号 "は文字符号化方式であるCEFでは "符号 "に、文字符号化モードであるCESでは "符号"に対応しますが、**「ナンバリング」と「エンコーディング」は全く異なる概念**です。

文字をナンバリングするプロセス、つまり文字コードポイントの値を決定するプロセスは、コンピュータとは直接関係なく、純粋に数学的な問題と考えることができます。なぜなら、それは文字と数字の一対一の対応に過ぎず、符号化アルゴリズムの問題をまったく含んでいないからです。

しかし、この2つの概念はしばしば混同され、混乱の元となっています。

文字符号化方式 CEF

抽象文字表ACRについて語るとき、文字数が固定されている伝統的なクローズドASCII文字表とは異なり、Unicode文字表は文字数が固定されておらず、将来さらに文字が追加される可能性がある現代的なオープン文字表であると言われました。そのため、ユニコードの番号付き文字セットに必要なコード・ポイントの数は増加の一途をたどっており、比較的無制限です。

しかし、コンピュータが表現できる整数の範囲は比較的限られています。例えば、符号なし1バイト整数は0から0xFFまでの合計256個の数値しか表すことができません。符号なし2バイト短整数は0から0xFFFFまでの合計65,536個の数値しか表すことができません。符号なし4バイト長整数は0から0xFFFFFFまでの合計429,496,729,296個の数値しか表すことができません。

そこで問題です:

  1. 一方では、比較的限られた数の整数で、将来的に比較的無限の文字数に対応できるような高いスケーラビリティを実現するにはどうすればいいのでしょうか?複数のシングルバイト整数で間接的に表現するのか、それとも十分に大きなマルチバイト整数で直接表現するのか。

  2. 一方、ASCII文字エンコーディングは、最も古く、すでに広く使われているエンコーディング方式であるため、完全に互換性がないことは明らかに賢明ではありません。

この2つの側面から、包括的な解決策が必要であり、それが文字符号化方式CEFです。

CEF(Character Encoding Factor)とは、番号付き文字セット内の文字のコードポイント値を、有限ビット長のコード化された値に変換(エンコード)する方法です。コード化された値は、実際にはコード要素のシーケンスです。

では、コードエレメントとは何でしょうか。なぜコードエレメントの概念が導入されたのでしょうか?そして、文字セット内の文字**番号は、コンピュータ内でどのように文字コード**に変換されるのでしょうか?心配しないでください、ここで最初に概念に注意してください、記事に詳細な説明がある後に、深入りしないでください。

文字符号化方式 CEFはまた、 "ストレージフォーマット "と呼ばれています。しかし、CEFを記憶形式と呼ぶのはあまり意味がありません。なぜなら、CEFはまだ特定のコンピュータシステムのための論理レベルの、プラットフォームに依存しない符号化方式にすぎず、特定のコンピュータシステムのための物理レベルの、プラットフォームに依存しない記憶方式にはまだ対応していないからです。

ASCIIのような伝統的で単純な文字符号化方式では、文字番号と文字符号化の区別はなく、文字番号が文字符号化であり、文字番号と文字符号化の間には直接的な対応関係があると考えることができます。

Unicodeのような現代的で複雑な文字符号化方式では、文字番号と文字符号を区別する必要があり、文字番号は必ずしも文字符号と等しくなく、文字番号と文字符号の関係は必ずしも直接対応付けではなく、例えば、UTF-8、UTF-16は間接対応付けですが、UTF-32は直接対応付けです。

UTF-8、UTF-16、UTF-32は、Unicode文字セットに対するCEFの一般的な文字符号化方式です。

多くの記事では、UnicodeとUTFの関係は、Unicodeが標準仕様で、UTFがエンコーディング実装であると表現されています。

厳密に言えば、そのように見なすこともできます。しかし、この表現は厳密さに欠け、Unicode標準、Unicode文字セット、UTF文字エンコーディングの関係をより詳しく理解する助けにはなりません。

注:現代の文字符号化モデルの観点からはUnicode符号化標準Unicode符号化方式Unicode符号化システムは基本的に同義であり、抽象文字表ACR番号付き文字集合CCS文字符号化方式CEF文字符号化スキーマCES、さらには次節で述べる伝送符号化文法TESを含む5つの次元の全体集合です。標準的なスキームシステムであり、これらのレイヤーのいずれかを特に指すものではありません。

コードページの起源

一般に、"Character Encoding Scheme "は「文字符号化方式」と訳されますが、通常は "Character Encoding Standard "または "Character Encoding System "を「文字符号化方式」と呼ぶのが通例です。しかし、"Character Encoding Standard "や "Character Encoding System "を "Character Encoding Scheme "と訳すのが通例ですので、混乱を避けるために"Character Encoding Mode"と訳します。

文字符号化方式(Character Encoding Scheme, CES)は、「直列化形式」とも呼ばれ、符号化された文字をコンピュータで処理、保存、伝送できるように、文字番号を符号化した後、符号要素列を**バイト**列にマッピングすることを指します。

番号付き文字セットのコードポイント値をコードエレメントのシーケンスにマッピングするプロセスが、特定のコンピュータシステムプラットフォームに依存しない論理的なエンコーディングプロセスである場合、コードエレメントのシーケンスをバイトシーケンスにマッピングするプロセスは、特定のコンピュータシステムプラットフォームに関連する物理的なエンコーディングプロセスです。

ハードウェアプラットフォームとオペレーティングシステム設計の歴史的な理由により、UTF-16、UTF-32、およびマルチバイトのコードエレメントを使用するその他の符号化方式では、コンピュータが正しく処理、保存、および送信できるようにするためにバイト列がビッグエンディアンかリトルエンディアンかを指定するために、本来はゼロ幅の非中断スペースとして知られている文字を使用する必要があります。

しかし、1バイトのコードエレメントを使うUTF-8では、バイトオーダーの問題はなく、バイトオーダーを指定する必要もありません。したがって、UTF-8エンコーディングのコードエレメント配列とバイト配列は、さまざまなコンピュータシステムのプラットフォームで同じです。

文字符号化モードCEFと文字符号化モードCESの両方に"encode"という単語があるので、動詞encodingは、番号付き文字集合CCSの文字番号を文字符号化モードCEFによって符号要素シーケンスに変換することを指す場合と、文字集合CCSの符号要素シーケンスを文字符号化モードCESによって文字符号化モードCESの符号要素シーケンスに変換することを指す場合があることに注意してください。文字符号化モード CEFによるバイト列への変換

動詞 **decode** は逆の働きをしますが、もちろん同じ2つの可能性が存在します。

また、一般的に名詞のエンコードと呼ばれるものはコード要素のシーケンスまたはバイト列のシーケンスを指す場合があります

従って、文脈に応じて具体的に理解する必要があります。

プログラマーにとって、文字符号化方式CEFによる符号化後に形成されるコード要素のシーケンスは論理的な意味での中間的な符号化であり、通常「直接扱う」対象ではありません。

文字符号化方式CESで符号化されたコードエレメント列をさらに符号化した後に形成されるバイト列は物理的な意味での最終的な符号化であり、通常、最も直接的に「扱われる」ものです。

伝送符号化構文 TES

歴史的な理由から、いくつかの特殊な伝送環境では、以前の文字符号化モードCESによって提供されたバイト列をさらに符号化のために適合させる必要があります。これは一般に2種類あります:

  1. 1つは、送信環境の制約を満たすために、バイト列をより制限された値フィールドのセットにマッピングすることです。例えば、電子メール送信のためのBase64エンコーディングやquoted-printableエンコーディングなどがあり、どちらも8ビットバイトを7ビットデータにマッピングします。

    注:電子メールプロトコルは、7ビットのASCII文字だけを送信するように設計されています。8ビットバイトから見ると、ASCII文字の最初の桁は常に0なので、最初の桁の0を取り除くと、実際に有効なビット数は7になります。おそらく当初は、電子メールプロトコルは、送信トラフィックを節約するために、7ビットのASCII文字だけを送信するように設計されていたのでしょう。

  2. もう1つは、LZWのような可逆圧縮技術やプロセス長エンコーディングなど、バイト列の値を圧縮する方法です。

コードページの表現

現代の文字エンコーディングモデルをまとめると

Unicodeのような最新の文字符号化システムでは、同じ文字が複数の異なる文字符号化モードCEFによって複数の異なるコード要素シーケンスを持ち、同じコード要素シーケンスが2つの異なる文字符号化モードCESによって2つの異なるバイトシーケンスを持つことがあります。

しかし、これらの異なるコード要素シーケンスやバイト列は同じ文字の表現であれば、対応する**コードポイント値**は一般的に同じです。

ANSI コーディングとコードページ

コンピュータはもともとアメリカ人によって発明されました。コンピュータの発明の冒頭では、数値計算の問題を解決するために使用され、後の人々は、コンピュータがテキスト処理など、より多くのことを行うことができることがわかりました。

しかし、コンピュータは010110111000...このような0と1の数で構成される2進数しか「知らない」、これはコンピュータの基礎となるハードウェア実装が0と1の数を表現するために切断と閉鎖の2つの状態の回路を使用するためです。従って、コンピュータは2進数を直接記憶し、処理することしかできません。

コンピュータ上で単語や記号などの文字を表現、保存、処理するには、これらの文字を2進数に変換する必要があります。

もちろん、確かにどのように変換する方法ではなく、それ以外の場合は、異なるコンピュータで異なる状況の文字を表示するために、同じ2進数になりますので、それは変換のための統一された基準を設定する必要があります。

だから、このような変換規格の設計---文字エンコーディング標準。

内部コード

文字符号化方式の進化のプレビュー):

計算、保存、通信ができる複雑なものであるコンピュータの最も基本的な機能は、人間の指示を読んで理解できることです。そのため、コンピュータが使用できる言語、コンピュータが読んで理解できる言語、人間が読んで理解できる言語を構築し、コミュニケーションができるようにしなければなりません。

バイナリーと16進法

コンピュータが使う言語とは?0は「いいえ」1は「はい」を意味します。0と1の様々な組み合わせや、0と1の間の演算によって、コンピュータは世界を理解し、分析し、人間の仕事を助けることができるのです。

しかし、0と1はとても単純なので、どんな単純な数でも0と1の長い文字列で表すことができます。例えば、コンピュータに1000という数字を覚えさせると、1111101000という長い文字列を覚えなければなりません。コンピュータは数字を記憶するのが得意ですが、人間はそうではありません。コンピュータが表現するデータをもっと短く、記憶しやすくする方法はないのでしょうか?

人間は10進数を使うことに慣れています。何しろ人間には指がありますから、10を1桁にするのはいいことです!でも、コンピュータに10進数を使わせるのは、10進数を2進数に変換するのが面倒で、現実的ではありません。

そこで、両者のバランスを取るために、8進数でも16進数でもOKということになりました。8進数の場合は、0から7までの8桁を使えばいいのですが、16進数の場合は、0から9までの8桁を使います。16進数では、最初の10桁を0~9で表し、それ以降をA, B, C, D, E, Fで表し、大文字と小文字は区別しません。ほとんどの場合、16進数を使用します。

Win システムのロケール

16進エンコーディングの原理は、2進数の長い文字列を4つのグループに分け、桁数が足りない場合は上位の桁を0で埋めるというものです。4桁の数字には16のケースしかなく、それぞれ0~9、A~Fで表されます。符号表はこのようになります:

0 0 0 0 0 8
1 1 0011 9
10 2 1010 A
11 3 1011 B B
001 4 0110 大韓民国政府は、国際連合の作業計画の実施を約束します。
101 5 0111 D
011 6 1110 E
111 7 1111 F

読みやすいASCIIコード

16進エンコーディングは素晴らしいのですが、問題があります。コンピュータでファイルを開くと、16進数がすべて表示されないのです... 16進数は、テキストを表現する方法としては、まだあまり優れているとは言えません。キーボードで入力されたすべての英字や記号を表現する方法はないでしょうか?キャリッジリターンやプレースホルダなど、キーボードで入力できない文字は、特殊な記号で表すことができます。そうすれば、ファイルを開いたとき、英字だらけになりますよね。

コンピュータ先進国のアメリカは、当然このような標準コード表を導入したがります。これがASCIIコード表と呼ばれるアメリカ標準情報交換コードです。このコード表には、数字、英大文字、記号、さまざまなエスケープ文字が含まれており、英語で使われるすべての機能を含めることができます。やがてASCIIは国際標準となり、現在知られている他のすべてのコーディング形式はASCIIと互換性があります。

他の言語はどうですか? ユニコードとUTF-8

あるエンコーディングを別のエンコーディングで開くとどうなりますか?

すべての国が独自のエンコーディング・テーブルを持っている今、疑問が生じます。国際化された今、自分の言語をサポートするエンコーディングシステムを使って、別のエンコーディングシステムでエンコードされたテキストを開くとどうなるのでしょうか?さらに悪いことに、インターネットの出現により、各国のコンピューターが通信する必要が出てきました。各国はこのアドレスを自国の言葉で書きたい。しかし、これでは他の国にとっては、文字を入力することができないため、アドレスにアクセスすることができません。そこで、ASCIIと互換性があり、どのようなエンコーディング形式でも可読文字だけで表現できるエンコーディングに変換できる中間エンコーディング形式が急務となりました。そのようなエンコーディングのひとつがBase64です。

これで文字エンコーディングの進化の話は終わりですので、元の記事に戻りましょう。

3つのコード間の変換

EBCDICコードはInternational Business Machines CorporationによってメインフレームOS用に開発され、1963年から1964年にかけて導入されました

EBCDICコードでは、アルファベットが連続的に配置されておらず、コードの途中で途切れることが多いため、プログラムを作成する側には多少の困難が伴います。

そのため、IBMのパーソナルコンピュータやワークステーションのOSではEBCDICは使われず、EBCDICよりも後に導入され、後に英語の文字エンコーディングの業界標準となったASCIIエンコーディング方式が使われました。

ASCIIコード

1963年に米国規格協会内部コード発表され、1968年に正式に開発されたASCII コードは、US-ASCII コードやベーシックASCII コードとも呼ばれます。

その後、ASCIIコード規格は 1972年にISO/IECに採用され、ISO/IEC 646規格として策定されました。したがって、ISO/IEC 646(しばしばISO 646と略されます)とASCIIは同じ符号化規格を指します。

ps:ASCIIはISO 646と全く同じではありませんが、ほとんどの国はASCIIと互換性があり、ISO 646と互換性のない国もあります。ISO646は、いくつかの国の標準から 7ビットの文字セットを作成したものです。 ISO646は、英字と数字以外はどの国でも同じで、その国の実際のニーズに応じて変更することができます。当時は 8ビット文字セット(具体的にはISO 2022) 普遍的に受け入れられていなかったため、各国は異なる文字や記号を文字セットに入れました。そのため、ASCIIに現れる文字や記号のいくつかは、ISO 646のいくつかの国のバリエーションには現れませんでした - Wikipedia.

ASCIIはEBCDICよりも後に誕生したため、ASCIIの符号化方式はEBCDICをモデルにしており、英語のアルファベットを連続した順序で並べることでプログラムの処理を容易にするという教訓を得ています。

ps: ASCIIコードは1963年に発表されましたが、標準化されていなかっただけで、EBCDICは1963年から1964年にかけて開発されました。EBCDICは1963年から1964年にかけて開発されたので、個人的には ASCIIの方が早いと思います。

ASCIIは最も古い文字符号化方式ではありませんが、現在、最も基本的で重要、かつ広く使われている文字符号化方式です。

ISO 8859シリーズ、GBシリーズ、Big5、Unicodeなど、現在使用されている他の文字エンコーディング方式は、すべてASCIIと直接的または間接的に互換性があります。

しかし、ASCIIとまったく互換性のないEBCDICのように、基本的には淘汰されるか、淘汰されそうな状況にあります。

ASCII文字符号化方式の紹介

ASCIIコードは7桁の2進数で1文字を表し、全部で128文字を表現します。

現在のコンピュータは一般に8ビットを1バイトとしてアクセスや処理を行うため、残りの最上位ビットは通常0ですが、通信システムによってはパリティビットとして使われることもあります。

ps:ASCIIが最初に発表された1963年当時、8ビット目は通信分野のプロトコルでチェックサムやエラー訂正に使われていました。しかし、コンピュータのメモリではチェック&エラーは不要となり、あまり使われなくなりました。その結果、ASCIIよりも多くの文字を表現できる8ビット文字エンコーディングが登場しました。--- ウィキペディアより - ISO/IEC 2022 - はじめに.

ASCII文字セットには合計128の文字があり、コードポイントには0から127までの番号が振られており、2進数の最上位桁は0です:

  • コードポイントの番号付け Dec 0 ~ 31:印字不可能な制御文字または通信固有の文字で表示されない場合があります。例えば、0x07 はコンピュータをビープ音で知らせ、0x00 は一般的に文字列の終わりを示すのに使われ、0x0D と 0x0A はプリンタの印刷ヘッダが行頭まで後退して次の行に移動することを示すのに使われます;

  • コードポイント番号 Dec 32:表示は可能だが印字はできないスペース文字

  • 12月 33日~12月621日表示・印刷可能な文字で、48~57は0~9のアラビア数字、65~90は26の大文字英字、97~122は26の小文字英字、残りは句読点や算術記号など;

  • コードポイント番号Dec 721印字不可能な制御文字DELは表示できません

この時点で文字の符号化と復号化は非常に簡単です、例えば、ストレージデバイスに書き込まれたバイナリストリームに文字のシーケンスをエンコードする場合は、あなただけのASCII文字セットの各文字の文字番号の文字のシーケンスに必要な、ストレージデバイスに直接バイナリバイトを書き込むことができ、文字番号は、文字エンコードであり、文字符号化計算に文字番号の変換のための特別な符号化アルゴリズムを通過する必要はありません、バイトにいわゆるコード要素シーケンスはありません。いわゆるコードシーケンスからバイトシーケンスへの変換はありません。

PS:この時点で混乱しないでください、元の文字番号は、ASCIIコードは、コードポイント番号に異なるバイナリ0と1の組み合わせになることを意味し、文字エンコードであり、すでに最も直接的なバイナリと文字のマッピング関係であり、変換する必要はありません。しかし、バイナリは10進数、16進ああで表現することができ、結局のところ、人間は10進数システム、よく見るためにマシンにバイナリのためのより直感的です。

ASCIIの問題点

しかし、ここで新たな問題が発生します。国によってアルファベットが異なるため、256記号の符号化システムを使用していても、それぞれ異なるアルファベットを表現してしまうのです。例えば、130はフランス語のエンコーディングではéを表しますが、ヘブライ語のエンコーディングではGimelという文字を表し、ロシア語のエンコーディングでは別の記号を表します。しかし、いずれにせよ、これらのエンコーディングでは、記号0~127は同じで、違いは128~255の部分だけです。

ASCIIは7ビットですか8ビットですか?

先ほども言ったように、旧アメリカの初期は7ビットで128文字、これが基本的なASCIIコードと言えます。当時は、8ビット目は文字の一部を表現するためではなく、エラー訂正やチェックのために使われましたが、当時はコンピュータの必要性がなかったため、あまり使われませんでした。だから、多くの8ビットの文字コードが徐々に登場し、つまり、8ビットの合計256文字は、ASCIIのスーパーセット、8ビット版、拡張ASCIIなどと呼ばれることができる、彼らは文字の8ビット目は、独自の国語の文字テーブルに適用されます、最後の7ビットとASCII一貫してASCIIと互換性のある、ASCIIの符号化範囲の使用では、0のための統一された規定の8ビット目は、コンピュータシステムが正確に1バイトに処理するように、ストレージなど。最後の7ビットはASCIIと互換性があります。

まとめ:7ビットASCIIと呼ぶところもありますが、実際には、8ビットを一緒に取り、0に設定することで、1バイトとして処理、保存、および送信することができます。

添付1:アスキーアート

グリフ、"単語絵"、"文字絵"、"単語絵 "とも呼ばれ、これは主に芸術の形式を表現するためにコンピュータに依存している絵を表現するためにコンピュータの文字の使用を指します。1982年にアメリカのカーネギーメロン大学で初めて登場し、インターネットが登場した当時は英語圏のソーシャルネットワークでよく使われていました。テキストエディタで生成可能。多くのASCIIアートは、表示のために固定幅のフォントを必要とします。

アスキーアートは、イメージよりもテキストの方が安定して速く表示できる場合に使われます。これには、タイプライター、テレタイプライター、グラフィックのない端末、初期のコンピュータネットワーク、電子メール、ユーズネットのニュースメッセージなどが含まれます。

ps: 私たちは主にフォーラムの署名、チャット、入力方法に見られます。

 ASCIIアートのグラフィックはHTML文書に配置できますが、等幅フォントで正しく表示できるように、通常はフォーマット・テキスト・タグに配置されます。また、CSSを使ってHTML内にASCIIアートを生成することもできます。

また、 UCSあります。ASCII ステレオグラムは、視線が適切に交差するようにイメージを見る錯覚を利用して、立体的なイメージを作成する ASCII アートです。自分の目で確かめてください。

別添2:ASCIIリボンアクション

Unicode1998年に発足し、 2013年6月に正式に終了した、電子メールをプレーンテキストで送信することを提唱するウェブ上のセンセーションでした。

ASCIIリボン構想の根拠は以下の通り:

  • 一部のメールクライアントはHTMLメールをサポートしていません。つまり、メールを受け取った人は、未処理のHTMLコードとして表示されるか、あるいはエラーメッセージとして表示されるため、メールを読むことができない可能性が高いのです。
  • 他のクライアントは、HTMLのデコードが非常に不十分であったり、壊れていたりするため、メッセージを読むことが困難です。
  • HTMLメールは多くのスペースを占め、非常に非効率的です。HTMLメールにグラフィックが含まれていない場合でも、プレーンテキストメッセージよりは大きくなります。ほとんどのインターネットユーザーにはメールアカウントの容量制限があり、それを超えると追加料金を支払わなければなりません。
  • 背景イメージや派手な図表を含むHTMLメールは、受信トレイと送信トレイの両方でスペースの無駄遣いとみなされます。数行のテキストのために200kb以上のメールをダウンロードしなければならないのは馬鹿げています。プレーンテキストを使えば、同じサイズのメールで同じ情報を正確に伝えることができます。

ps:HTMLメール、つまりメールボックスによく届く派手な広告メール。

EASCII

1バイトに表現できるコードが256個あることを考えると、ASCII文字は1バイトの下位7ビット(0x00から0x7Fまで)のみを使用します。

つまり、ASCIIでは1バイトで表現できる256個のコードのうち、最初の128個だけを使用し、最後の128個は未使用です。そのため、ヨーロッパ諸国では後者の128コードで勝負しています。

問題は、ヨーロッパ各国が同じアイデアを同時に持っていること。そのため、0x80から0xFFまでの最後の128個のコードにどのような文字を対応させるかは、それぞれの国が独自に設計しています。

ps:これはISO 646の異なるバリエーションで、いくつかの国でも基本的なASCIIコードと互換性のある部分を変更しています。ですから、ASCIIはISO 646と同等ではありません。

ヨーロッパにおけるこの混乱した状況に終止符を打つため、ASCIIと互換性があり、ヨーロッパ諸国で使用されている派生文字もサポートする、2つの統一されたシングルバイト文字エンコーディング方式が設計されました:1つは EASCII文字エンコーディング方式で、もう1つは ISO/IEC 5889 文字エンコーディング方式です。

ps:EASCIIは 1964年にISO 8859シリーズに導入され、1982年に OEM 協力して作業を開始しました。1985年にECMA - 94が発行され、後にISO/IEC 8859パート1、2、3、4として標準化に採用されました。パート5、6、7、8、9、10、11、12、13、14は1988年に、パート15と16は1988年にそれぞれ発行されました、第5部、第6部、第7部、第8部、第9部、第10部、第11部、第12部、第13部、第14部、第15部、第16部は 1988年、1987年、1989年、1992年、2001年、1997年、1998年、1999年、2001年に発行。

EASCII コードから始めましょう。 EASCII コードも、ASCIIの未使用の最上位ビットを使って新しい文字を符号化します これらのASCII文字以外の新しい文字では、最上位ビットは常に1 です)。つまり、1 バイトの 8 ビットすべてが文字を表すのに使われます。たとえば、フランス語の é は 130 としてエンコードされます。

明らかに、EASCIIコードはASCIIコードと同じ1バイトエンコーディングを使用していますが、ASCIIの128文字の2倍である256文字まで表現することができます。

したがって、EASCIIでは、最初のビットが0のときは、一般的に使用されているASCII文字を表し、1のときは、さらに拡張された他の派生文字を表します

このように、ASCIIコードをベースに、ASCIIコードの互換性を確保するだけでなく、新しい文字の拡張を補完するため、拡張ASCII(Extended ASCII)コード、略して EASCIIコードと呼ばれています。

EASCIIコードでASCIIコードより拡張される記号は、下表のように表記号、計算記号、ギリシャ文字、特殊ラテン文字などです。

ただし、現在ではEASCIIコードはほとんど使われず、ISO/IEC 8859の文字符号化方式が一般的です。

グリフ

シリーズは、EASCIIコードと同様、ASCIIコードをベースとし、ASCIIの7ビット符号化では使用されない最上位ビットを利用し、符号化範囲を元のASCIIコードの0x00~0x7Fから0x80~0xFFに拡張したものです。

1982年にSAP ECMAが この作業を開始し、1985年に ECMA-94が発行され、1988年に[ISO/IEC 8859 parts 1]、2、3、4として採用され標準化されました。

なお、ISO 8859の文字符号化方式で拡張された128個のコードのうち、実際に使用されているのは0xA0~0xFFだけです。つまり、0x80から0x9Fまでの32個のコードは文字を定義しておらず、この96個のコードだけが文字を定義しています。

明らかに、ISO/IEC 8859文字符号化方式もシングルバイト符号化方式であり、ASCIIと完全に互換性があります。

ISO/IEC 8859はASCIIやEASCIIのように別々の文字集合ではなく、合計15の文字集合、すなわちISO/IEC 8859-n(n=1,2,3...15,16....15, 16. ps: 詳細はウィキペディアを参照してください --- 上のリンクをクリックするとジャンプします。

これら15の文字セットは、ヨーロッパ諸国で使用されているほぼすべての文字をカバーしており、文字セットの追加拡張のそれぞれが実際に使用するのは0xA0から0xFFまでの96コードのみです。

ps:つまり、拡張の96エンコーディングは、基本的なASCIIの部分を除いて、互いに互換性がないということです。

ISO-8859-X 文字セットは、ISO-2022 のいくつかのコンポーネントの特定の組み合わせです。これらの構成要素には以下が含まれます:

  • ローエンド制御文字
  • ASCII文字セット
  • ハイエンド制御文字
  • ハイエンド文字は ISO-8859-X の各バリアントに固有です。たとえば、ISO-8859-1はISO-IR-1、ISO-IR-6、ISO-IR-77、ISO-IR-100で構成されています。

C0、GL、C1、GRなどの概念については、 ISO 2022と ISO 5889の ウィキペディアのページに詳しく説明されていますので、リンクをクリックしてより詳しくご覧ください。

このうち、ISO/IEC 8859-1は西ヨーロッパでよく使われる文字が含まれているため、ISO 8859-1と略されることが多く、 Latin-1という別名もあります。

注:イメージのタイトルの前にある「Codepage 819」は、ISO 8859-1で符号化されたコードページ番号が819であることを意味しており、「コードページ」の導入については後で詳しく説明します。

ISO 8859-2からISO 8859-16までの残りの文字を以下に示します:

  • ISO8859-2文字セットはLatin-2として知られ、東欧文字を含んでいます;
  • ISO8859-3文字セットはLatin-3としても知られ、南ヨーロッパ文字を含んでいます;
  • ISO8859-4文字セット(Latin-4としても知られています)には北欧の文字が含まれています;
  • ISO 8859-5文字セット(別名キリル文字)にはスラブ文字が含まれています;
  • ISO 8859-6文字セット(別名アラビア文字)にはアラビア文字が含まれています;
  • ISO 8859-7文字セット(ギリシャ文字としても知られる)にはギリシャ文字が含まれています;
  • ヘブライ語としても知られるISO 8859-8文字セットにはヘブライ語の文字が含まれています;
  • ISO 8859-9文字セット(Latin-5またはTurkishとしても知られています)にはトルコ文字が含まれています;
  • ISO 8859-10文字セット(別名Latin-6またはNordic)には北欧文字が含まれています;
  • ISO 8859-11文字セットはタイ語としても知られ、タイの国家標準TIS-620文字セットとほぼ同等ですが、唯一の違いはISO 8859-11では非改行スペースNBSP文字が定義されていますが、TIS-620では定義されていないことです;
  • ISO 8859-12文字セット、現在未定義;
  • ISO 8859-13文字セット、Latin-7としても知られ、主にバルト諸国の記号をカバーしていますが、Latin-6にはないラトビア語の文字も追加されています;
  • ISO8859-14文字セット、別名Latin-8。Latin-1の記号の一部をケルト文字に置き換えたもの;
  • ISO8859-15文字セットは、Latin-9、または冗談でLatin-0としても知られており、Latin-1からあまり使われていない記号を削除し、元々省略されていたフランス語とフィンランド語のアルファベットに置き換えています;
  • ISO8859-16文字セットはLatin-10としても知られ、アルバニア語、クロアチア語、ハンガリー語、イタリア語、ポーランド語、ルーマニア語、スロベニア語などの南東欧諸国の言語をカバーしています。

ISO 2022シリーズ

前述のEASCIIとISO 8859のリリーススケジュールの間には、 ISO 2022というもう一つの重要な文字コードがあります。

ASCIIよりも多くの文字を表現する8ビット文字コードが徐々に登場したため、ECMA-35規格が1971年に発行されました。このため、1971年に発行された ECMA-35 規格は、さまざまな7ビットまたは8ビットの文字コードが準拠すべき共通の規則を規定するために使用されました。ECMA-35はその後 ISO 2022として採用され、特に東アジア言語(中国語、日本語、韓国語)の文字符号化方式としてよく知られています。

英語は7ビットエンコーディングで保存できますが、ラテン語、ギリシャ語、キリル文字、ヘブライ語などのアルファベットを使用する他の言語は、数十文字しか使用しないため、伝統的にISO/IEC 8859標準を使用して8ビットエンコーディングで表現されてきました。しかし、中国語、日本語、韓国語には8ビット1文字では表現できない文字が多数あるため、1文字を表現するのに1バイト以上が必要になります。そのため、ISO 2022は、中国語、日本語、韓国語を複数の7ビット符号化文字で表現できるように設計されました。

ISO 2022は

  • 複数の文字セットに属する文字を1つの文字コードで表現する場合;
  • 大規模な文字セットの表現
  • 7ビットチャンネルと互換性があり、8ビット符号化文字セットとも互換性があります。

ISO 2022では、後続の文字が属する文字セットを示すために「エスケープ文字列」を使用します。これらの文字セットはISOに登録されており、ISO 2022規格で指定されているパターンに従います。エスケープ文字列は、1つの "ESC "文字の後に2つまたは3つの文字列が続くものです。このトークンはそれに続く文字を表し、下の表の文字セットのテキストに属します。文脈からどの文字集合であるかを判別できる場合、エスケープシーケンスなしでどの文字集合であるかを指定することも可能です。実際、ISO-8859-1はエスケープシーケンスを定義する必要はないと宣言しています。その理由の詳細は ISO-8859-1にあります。

ISO 2022は欧州標準化機構のECMA-35に相当し、日本の国家規格GB 2312、日本工業規格JIS X 0202、韓国工業規格KS X 1004はすべてISO 2022の仕様に準拠しています。

次の記事 文字符号化

Read next

vue basic 04 - コンポーネントと通信する他の方法

vue foundation 04 - コンポーネントと通信する他の方法 1. provide と inject - 階層的なネストでデータ通信を処理 親コンポーネントの provide で変数を提供し、子コンポーネントの inject で変数を注入します。いいえ

Apr 17, 2020 · 2 min read