私はコーディングにそれほど厳しいことをしたことがないので、Unicode と UTF-8 についてはあまり知りません。 最近、UTF-8に関する記事を偶然読んだのですが、説明が非常に複雑に感じたので、もっとシンプルでわかりやすい記事を書こうと思いました。
まず、現在一般的に使用されているエンコーディング スキームのいくつかを説明します。
1. 中国本土で最も一般的に使用されているエンコーディングは GBK18030 です。 GBK と GB2312 に加えて、これらのコード間の関係は次のとおりです:
最も初期の中国語文字エンコーディングは GB2312 で、6763 個の漢字と 682 個のその他の記号が含まれており、このエンコーディングは 1995 年に改訂され、GBK1.0 と名付けられました。合計 21886 個のシンボル。 その後、GBK18030 エンコードが開始され、合計 27,484 の中国語文字に加え、チベット語、モンゴル語、ウイグル語、その他の主要な少数民族言語が含まれるようになりました。現在、WINDOWS プラットフォームは GBK18030 エンコードをサポートする必要があります。
GBK18030、GBK、GB2312 の順に、3 つのエンコーディングは下位互換性があります。同じ漢字は 3 つのエンコーディング スキームで同じエンコーディングを持ちます。
2. 台湾、香港などは BIG5 エンコーディングを使用します
3. 日本: SJIS エンコーディング
各地のテキストエンコーディングを記述する場合は Unicode世界各国が共同開発した言語です。
この言語環境では、言語エンコードの競合がなくなり、どの言語のコンテンツも同じ画面に表示できるようになります。これが Unicode の最大の利点です。
では、Unicode はどのようにエンコードされるのでしょうか?実際、これは非常に簡単です。
は、世界中のすべてのテキストを 2 バイトを使用してエンコードすることです。 2 バイトで最大 65536 個のコードを表現できるのですが、それで十分なのでしょうか?
韓国と日本の漢字のほとんどは中国から伝わったもので、フォントはまったく同じです。 たとえば、「文」という単語は GBK と SJIS では同じ漢字ですが、エンコードが異なります。 このように、このように統一されたエンコーディングを使用すると、世界中のすべての言語のほとんどのテキストを 2 バイトで十分に収容できます。
Unicode の学名は「Universal Multiple-Octet Coded Character Set」で、UCS と呼ばれます。
現在使用されているのは2バイトエンコードのUCS-2ですが、将来的に2バイト不足にならないようにするためにUCS-4が開発されました。 UCS-2 は、基本多言語プレーンとも呼ばれます。
UCS-2 から UCS-4 への変換は、前に 2 バイトの 0 を追加するだけです。
UCS-4 は主に、Unicode 4.0 の 2 番目の補助プレーンなどの補助プレーンを保存するために使用されます。
20000-20FFF - 21000-21FFF - 22000-22FFF - 23000-23FFF - 24000-24FFF - 25000-25FFF - 26000-26FFF - 27000-27FFF - 28000-28FFF - 29000-29FFF - 2A000-2AFFF - 2F000-2FFFF
合計 16 の補助プレーンが追加され、元の 65536 コードからほぼ 100 万コードに拡張されました。
エンコーディングが統一されたので、どうすればさまざまな国の元のテキストエンコーディングと互換性を持たせることができるのでしょうか?
現時点ではコードページが必要です。
コードページとは何ですか?コードページは、各国のテキスト エンコーディングと Unicode の間のマッピング テーブルです。たとえば、簡体字中国語と Unicode 間のマッピング テーブルは CP936 です。
以下は一般的に使用されるコードページです。上記のアドレスの番号を適宜変更してください:
codepage=936 簡体字中国語 GBK
codepage=950 繁体字中国語 BIG5
codepage = 437 米国/カナダ 英語
codepage=932 日本語
codepage=949 韓国語
codepage=866 ロシア語
codepage=65001 unicode UFT-8
によると、最後のものは 65001個人的に理解してください。これは単なる仮想マッピング テーブルであるはずですが、実際には単なるアルゴリズムです。
936 からランダムな行を取り出します。例:
0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH
前のエンコードは GBK エンコードで、次のエンコードは Unicode です。
この表を確認すると、GBK と Unicode 間の変換が簡単に行えます。
Unicode については理解できたところで、UTF-8 とは何でしょうか?そして、なぜ UTF-8 が登場するのでしょうか?
ASCII を UCS-2 に変換します。エンコード前に 0x0 を挿入するだけです。これらのエンコーディングを使用すると、または / などの制御文字が含まれるため、UNIX および一部の C 関数で重大なエラーが発生します。したがって、UCS-2 が Unicode の外部エンコーディングとして適切でないことは確かです。
こうして UTF-8 が誕生しました。では、UTF-8 はどのようにエンコードされるのでしょうか? UCS-2の問題を解決するにはどうすればよいですか?
の例:
E4 BD A0 11100100 10111101 10100000
これは、「あなた」という言葉のUTF-8エンコードです
の Unicode エンコーディングは、次のように UTF-8 のエンコーディング ルールに従って分解されます。 xxxx0100 xx111101 xx100000
x 以外の数字をつなぎ合わせて、"you" の Unicode エンコーディングになります。 」。
UTF-8 エンコード後は、最上位ビットが常に 1 であるため、機密文字は表示されなくなります。
以下是Unicode與UTF-8之間的轉換關係表:
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 -000xxxxxxx U -0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx01100xxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Unicode編碼轉換到UTF-8,簡單的把Unicode位元組流套到x中就變成UTF-8了。