文字とは、各国の文字、句読点、図記号、数字など、さまざまな文字や記号の総称です。文字セットは複数の文字の集合であり、各文字セットには異なる数の文字が含まれています。ASCII 文字セット、GB2312 文字セット、GB 18030 文字セットです。 、Unicode 文字セットなどコンピューターがさまざまな文字セットのテキストを正確に処理するには、コンピューターがさまざまなテキストを認識して保存できるように文字エンコーディングが必要です。
中国語の文字は数多くあり、簡体字中国語と繁体字中国語の 2 種類の文字に分けられ、それぞれ異なる表記規則が使用されています。そのため、コンピューターは英語の 1 バイト文字をベースに設計されています。は中国の技術的基盤の重要な部分を占めています。この記事では、いくつかの代表的な文字セットを文字セットの年代順に説明し、いくつかの代表的な漢字セットを選択し、その歴史的起源、特徴、および技術的特徴を検討します。
ASCII 文字セット
1. 名前の由来
ASCII (American Standard Code for Information Interchange、American Standard Code for Information Interchange) は、ローマ字に基づくコンピューターコーディングシステムです。
2.特徴
主に現代英語やその他の西ヨーロッパ言語を表示するために使用されます。これは現在最も一般的なシングルバイト エンコード システムであり、国際標準 ISO 646 と同等です。
3. コンテンツが含まれます
制御文字:Enterキー、バックスペースキー、改行キーなど
表示可能文字:英大文字、小文字、アラビア数字、欧文記号
4.技術的特徴
7 ビットで 1 文字を表し、合計 128 文字
5.ASCII拡張文字セット
7 ビットでエンコードされた文字セットは 128 文字のみをサポートし、より一般的に使用されるヨーロッパ文字を表すために、ASCII 拡張文字セットは 8 ビットを使用して文字を表現し、合計 256 文字を使用します。 。
ASCII 拡張文字セットによって拡張された記号には、表記号、計算記号、ギリシャ文字、および特殊なラテン記号が含まれます。
GB2312 文字セット
1. 名前の由来
GB2312 は GB2312-80 文字セットとも呼ばれ、正式名は「情報交換用中国語コード化文字セット基本セット」で、旧中国国家標準局によってリリースされ、1981 年 5 月 1 日に実装されました。
2.特徴
GB2312 は中国の国家標準の簡体字文字セットです。含まれる漢字は使用頻度の 99.75% をカバーしており、基本的に漢字のコンピュータ処理ニーズを満たしています。中国本土とシンガポールで広く使用されています。
3. コンテンツが含まれます
GB2312 には、簡体字中国語文字と一般記号、シリアル番号、数字、ラテン文字、日本語のかな、ギリシャ文字、ロシア文字、中国語のピンイン記号、中国語の表音文字、合計 7445 個のグラフィック文字が含まれています。これには、第 1 レベルの中国語 3,755 文字と第 2 レベルの中国語 3,008 文字を含む 6,763 文字、ラテン文字、ギリシャ文字、日本語のひらがなおよびカタカナ文字、ロシア語のキリル文字を含む 682 個の全角文字が含まれています。
4.技術的特徴
(1) パーティション表現:
GB2312 では、収集された漢字は「分割」され、各ゾーンには 94 個の漢字/記号が含まれます。この表現は位置コードとも呼ばれます。
各エリアに含まれる文字は次のとおりです: エリア 01 ~ 09 は特殊記号、エリア 16 ~ 55 はピンイン順にソートされた第 1 レベルの漢字、エリア 56 ~ 87 は部首別にソートされた第 2 レベルの漢字です。 /ストローク; エリア 10 ~ 15 および 88 ~ 94 のエリアはコード化されません。
(2)全角表現
2 バイトのうち最初のバイトが 1 バイト目、次のバイトが 2 バイト目です。通常、最初のバイトを「上位バイト」と呼び、2 番目のバイトを「下位バイト」と呼びます。
「上位バイト」は0xA1~0xF7(エリア01~87の市外局番に0xA0を加算)、「下位バイト」は0xA1~0xFE(0xA0に01~94を加算)を使用します。
5.コーディング例
GB2312 文字セットの最初の漢字「あ」を例に挙げます。その市外局番は 16、ビット番号は 01 です。市外局番は 1601 です。ほとんどのコンピュータ プログラムでは、上位バイトと下位バイトが次のようになります。 0xA0 はプログラムの漢字処理コード 0xB0A1 を取得します。計算式は、0xB0=0xA0+16、0xA1=0xA0+1となります。
BIG5 キャラクターセット
1. 名前の由来
Big Five または Big Five とも呼ばれ、台湾情報産業協会によって 1984 年に設立され、Acer、MiTAC、Allison、Zero One、Volkswagen (FIC) という 5 つのソフトウェア会社が設立されたため、ビッグファイブコード。
Big5 コードは、当時台湾のさまざまなメーカーが相互に互換性のない異なるコード (Yitian コード、IBM PS55、湾岸コードなど) を発売したために作成されました。一方、台湾政府は、中国本土の GB2312 エンコードには繁体字中国語の文字が含まれていません。
2.特徴
Big5 文字セットには、合計 13,053 個の漢字が含まれており、この文字セットは台湾、中国で使用されています。興味深いのは、この文字セットには同じ 2 つの文字、「兀」 (0xA461 および 0xC94A) と「嗀」 (0xDCD1 および 0xDDFC) が繰り返し含まれていることです。
3.文字エンコード方式
Big5 コードは 2 バイトの保存方法を使用し、単語をエンコードするのに 2 バイトを使用します。最初のバイトは「上位バイト」と呼ばれ、2 番目のバイトは「下位バイト」と呼ばれます。上位バイトのエンコード範囲は0xA1~0xF9、下位バイトのエンコード範囲は0x40~0x7E、0xA1~0xFEです。
各エンコード範囲に対応する文字の種類は次のとおりです。 0xA140 ~ 0xA3BF は句読点、ギリシャ文字、特殊記号です。 さらに、0xA259 ~ 0xA261 には 2 音節の測定単位の単語が格納されます: 噙兛兞兝兡。嗧瓩玎; 0xA440-0xC67E は一般的に使用される漢字で、最初に画数、次に部首で並べ替えられます。0xC940-0xF9D5 は次に最もよく使用される漢字で、最初に画数で並べ替え、次に部首で並べ替えます。
4.Big5の限界
Big5 コードには 10,000 文字以上が含まれていますが、社会でよく使われる人名、地名、方言、化学、生物学などは考慮されていません。また、日本語のひらがなやカタカナは含まれていません。 。
たとえば、台湾では「朱」は「朱」の変形であると考えられているため、「朱」という単語は含まれません。康熙辞典の一部の部首(「亠」、「疒」、「辵」、「綶」など)、通称(「君」、「玄」、「檜」、「喆」など) 」など)はBig5には含まれません。
GB18030 文字セット
1. 名前の由来
GB 18030 の正式名称は、GB18030-2000「情報交換用の中国語文字エンコーディング文字セットの基本セットの拡張」です。これは、2000 年 3 月 17 日に中国政府によって発行された漢字エンコーディングの新しい国家標準です。 2001 年 8 月 31 日以降、中国市場でリリースされたソフトウェアはこの規格に準拠する必要があります
2.特徴
GB 18030 文字セット標準は、国内外の情報技術業界の有名企業、情報産業省、旧国家品質技術監督局によって共同で実装されました。 。
GB 18030 文字セット標準は、中国語の文字、日本語のかな、韓国語、および中国の少数文字で構成される大規模な文字セットのコンピュータ エンコードの問題を解決します。この規格の合計文字エンコード空間は 150 万エンコード ビットを超え、中国語、日本語、韓国語、および中国の少数文字をカバーする 27,484 個の中国語文字が含まれています。中国本土、香港、台湾、日本、韓国を含む東アジアでの情報交換に必要な、多言語、大きなフォント サイズ、多目的、統一コーディング形式の要件を満たしています。また、Unicode 拡張文字語彙「統一漢字拡張 A」の内容を満たし、Unicode バージョン 3.0 と互換性があります。また、以前の各国文字エンコーディング標準 (GB2312、GB13000.1) と互換性があります。
3. 符号化方式
GB 18030 規格では、1 バイト、2 バイト、4 バイトの 3 つの方式を使用して文字をエンコードします。半角部分は0x00~0x7Fのコード(ASCIIコードの対応コードに相当)を使用します。 2 バイト部分では、最初のバイト コードの範囲は 0x81 ~ 0xFE、最後のバイト コード ビットはそれぞれ 0x40 ~ 0x7E と 0x80 ~ 0xFE です。 4 バイト部分は、GB/T 11383 では使用されていない 0x30 ~ 0x39 を 2 バイトエンコード拡張のサフィックスとして使用します。拡張された 4 バイトエンコードの範囲は 0x81308130 ~ 0xFE39FE39 です。 。最初と 3 バイトのエンコード コード ビットはすべて 0x81 ~ 0xFE で、2 バイト目と 4 バイトのエンコード コード ビットはすべて 0x30 ~ 0x39 です。
4.収録内容
ダブルバイト部分に含まれるコンテンツには、主に GB13000.1 の 20902 個のすべての CJK 漢字、13 個の関連する句読点と表意文字記述子、80 個の補助漢字と部首/コンポーネント、ダブルバイトでエンコードされたユーロ記号などが含まれます。 。 4 バイト部分には、上記の 2 バイト文字を除く、CJK 統一中国語文字拡張 A を含む GB 13000.1 のすべての文字が含まれます。
Unicode 文字セット
1. 名前の由来
Unicode 文字セットエンコーディングは、Universal Multiple-Octet Coded Character Set の略称で、Unicode コンソーシアムという団体によって開発された文字エンコーディング システムであり、今日の世界中のさまざまな種類の文字の交換、処理、表示をサポートしています。さまざまな言語のテキスト。このエンコードは 1990 年に開発が開始され、1994 年に正式に発表されました。最新バージョンは 2005 年 3 月 31 日の Unicode 4.1.0 です。
2.特徴
Unicode はコンピュータで使用される文字コードです。各言語の各文字に統一された一意のバイナリ エンコーディングを設定し、言語間およびプラットフォーム間のテキスト変換と処理の要件を満たします。
3. 符号化方式
Unicode 標準では常に 16 進数が使用され、書き込み時に先頭に「U+」が付けられます。たとえば、文字「A」は 004116 としてエンコードされ、文字「?」は 20AC16 としてエンコードされます。したがって、「A」のエンコードは「U+0041」と記述されます。
4.UTF-8エンコーディング
UTF-8 は Unicode を使用する方法の 1 つです。 UTF は Unicode Translation Format であり、Unicode を特定の形式に変換することを意味します。
UTF-8 は、ネットワーク上の異なるコンピューター間で、異なる言語およびエンコーディングでのテキストの送信を容易にし、シングルバイト処理を処理する既存のシステム上で 2 バイト Unicode を正しく送信できるようにします。
UTF-8 は、Unicode 文字の格納に可変長バイトを使用します。たとえば、ASCII 文字の格納には引き続き 1 バイトが使用され、アクセント付き文字、ギリシャ文字、またはキリル文字の格納には 2 バイトが使用されますが、一般的に使用される中国語の文字は格納する必要があります。 3バイト。補助プレーン文字は 4 バイトを使用します。
5.UTF-16 および UTF-32 エンコード
UTF-32、UTF-16、および UTF-8 は、Unicode 標準エンコード文字セットの文字エンコード スキームであり、1 つまたは 2 つの未割り当ての 16 ビット コード単位のシーケンスを使用して、Unicode コード ポイントをエンコードします。 32 は、各 Unicode コード ポイントを同じ値の 32 ビット整数として表します。
さまざまな PHP アプリケーションにおけるコード化けの問題の解決策
1) タグを使用してページエンコーディングを設定します
このタグの目的は、クライアントのブラウザがページを表示するために使用する文字セット エンコーディングを宣言することです。xxx には、GB2312、GBK、UTF-8 (MySQL の UTF8 とは異なります) などを指定できます。したがって、ほとんどのページはこのメソッドを使用して、このページを表示するときに使用するエンコーディングをブラウザーに指示し、エンコーディング エラーや文字化けを回避できます。しかし、場合によっては、この文がどの xxx であっても機能しないことがわかります。これについては後で説明します。
これは HTML 情報に属し、サーバーが HTML 情報をブラウザーに渡したことを示すだけの単なるステートメントであることに注意してください。
2) header("content-type:text/html; charset=xxx");
この関数 header() の機能は、括弧内の情報を http ヘッダーに送信することです。括弧内の内容が記事に記載されているとおりであれば、最初のラベルと比較してみると、文字が似ていることがわかります。ただし、違いは、この機能がある場合、ブラウザは常に要求された xxx エンコーディングを使用し、決して従わないことです。そのため、この機能は非常に便利です。これはなぜでしょうか? 次に、http ヘッダーと HTML 情報の違いについて話さなければなりません:
http ヘッダーは、http プロトコルを使用して HTML 情報をブラウザーに送信する前にサーバーによって送信される文字列です。タグはHTML情報に属しているため、header()で送信された内容が最初にブラウザに届きます。人気のポイントは、header()の優先度が高いことです(これを言えるかわかりませんが)。 PHP ページに header("content-type:text/html;charset=xxx") と header("content-type:text/html;charset=xxx") の両方がある場合、ブラウザは前者の http ヘッダーとヘッダーのみを認識します。メタではありません。もちろん、この関数はphpページ内でのみ使用できます。
また、前者は確実に動作するのに、後者は動作しない場合があるのはなぜでしょうか、という疑問も残ります。これが、次に Apache について話したい理由です。
3)AddDefaultCharset
Apache ルート ディレクトリの conf フォルダに、Apache 設定ドキュメント全体 httpd.conf があります。
テキスト エディタを使用して httpd.conf を開きます。行 708 (バージョンが異なる場合があります) には、AddDefaultCharset xxx が含まれています (xxx はエンコーディング名です)。このコード行の意味: サーバー全体の Web ページ ファイルの http ヘッダーの文字セットをデフォルトの xxx 文字セットに設定します。この行があることは、各ファイルにヘッダー行 ("content-type: text/html; charset=xxx") を追加することと同じです。これで、ブラウザが utf-8 に設定されているにもかかわらず常に gb2312 を使用する理由が理解できました。
Web ページに header("content-type:text/html; charset=xxx") がある場合、デフォルトの文字セットが設定した文字セットに変更されるため、この機能は常に役立ちます。 AddDefaultCharset xxx の前に「#」を追加し、この文をコメントアウトし、ページにヘッダー (「content-type...」) が含まれていない場合は、メタ タグが有効になります。
上記の優先順位は以下のとおりです:
ヘッダー("content-type:text/html; charset=xxx")
..AddDefaultCharset xxx
..
Web プログラマーの場合は、どのページでも正しく表示できるように、各ページにヘッダー ("content-type: text/html; charset=xxx") を追加することをお勧めします。移植性も比較的高いサーバーです。
4) php.iniのdefault_charset設定:
php.ini のDefault_charset = "gb2312" は、php のデフォルトの言語文字セットを定義します。通常、この行をコメント アウトし、必須要件とするのではなく、Web ページ ヘッダーの文字セットに基づいてブラウザが自動的に言語を選択できるようにすることをお勧めします。これにより、複数の言語の Web サービスを同じサーバー上で提供できます。