なぜ文字化けした文字があるのですか?コーデックとは何ですか?なぜこれほど多くの文字セットがあるのですか?

WeChat検索[ SanTaizi Ao Bing ]は、感情と乾物で、このさまざまなプログラマーに注目しています。

この記事GitHubhttps ://github.com/JavaFamilyに含まれており、主要企業へのインタビュー用の完全なテストサイト、資料、および一連の記事が含まれています

序文

誰もが文字化けしたコードに遭遇したと思います。今日、私のガールフレンドのサンワイが急いで私に近づいてきました。

食後になんとかやってくれたのですが、三ワイはモグジエのガールフレンドにふさわしく、好奇心は私のものと同じです。

では、なぜ文字化けした文字があるのでしょうか。

エンコーディングとは何ですか?デコーディングとは何ですか?

文字コードとは何ですか?文字セットとは何ですか?

なぜUnicodeがあるのですか?UTF-8とGBKの違いは何ですか?

サンワイは膝の上に座って、コケティッシュな一連の質問のように私に話しかけました。私はファンですがガールフレンドなので、この記事を持っています。

なぜ文字化けしているのですか

コンピューターに保存されているのは0と1で構成されるバイトストリームだけであり、数字だけではニーズを満たすことができないことはわかっています。テキスト処理なども必要ですが、コンピューターは数字しか認識しないため、コンピューターにどの数字を伝える必要があります。それが表す文字

例えば、私は0001 Bは、私がコンピュータに保存されているAB 2つの文字をしようとしていますので、コンピュータは、このことを知っているだろう表し、それが実際に格納されている、0000 Aの代表を指定し0000 0001実際には、各文字に一意のコードをカスタマイズすることと等価です

しかし、これは私の指定です。人によってアイデアは異なります。たとえば、Xiao MingはAが1000、Bが1111が好きです。次に、Xiao Mingのコンピューターは、彼が指定したエンコード方法で保存されます。つまり1000 1111、コンピューターに送信された後、次に1000 1111、私のコードによると、文字化けしている%&である可能性があります。

したがって、文字化けしたコードの本質は、エンコードとデコードの間に対応関係がないことです

一部の学生は、エンコードとデコードの概念に精通していない可能性があります。説明させてください。

  • エンコーディング:実際には、特定の形式に従って文字をバイトストリームに変換するプロセスです。
  • デコード:バイトストリームを文字に解析します。

ランダムエンコーディングでは、それぞれのコンピュータが正しく解析できない状況になることがわかります。そのため、標準が必要であり、誰もがその標準を使用して文字と数字の対応を指定します。

標準の文字エンコーディング

American National Standards Institute ANSIは、一般的に使用される文字セットのセットと対応するデジタル番号を指定する標準である情報交換のための米国標準コード(ASCII)を開発しました。たとえば、65はAを意味します。

ASCIIは実際には7ビットエンコーディングであり、バイナリコードで表され、0000000〜1111111ですが、1バイトは8ビットであるため、通常は8ビットがストレージに使用されます。ASCIIは128文字を表していることがわかります。これは実際にはアメリカのエンコーディングです。英語も話すイギリスを見てください。ASCIIにはポンドマークがありません。

中国人はもちろん、韓国人、日本人などがいます。

1バイトはせいぜい256文字しか表現できないので、足りないので拡張する必要があります。たとえば、GB2312は、国家標準管理局が発行した「情報交換用の中国語文字コード文字セット」です。その後、GBKがリリースされました。 Kは拡張の意味です。GB2312をベースに、従来の文字など多くの文字が追加されています。

したがって、言語が異なり、文字セットの違いによりコンピューター間のドキュメントの通信が非常に困難になるため、国ごとに独自の標準があり、誰もが標準化の波を始めています。

たとえば、米国のANSI組織は、実際にはプラットフォームのデフォルトのエンコーディングであるANSI標準文字エンコーディングを策定しました。たとえば、中国のオペレーティングシステムはGBKを使用し、米国の場合はASCIIを使用し、オペレーティングシステムはこれらの標準文字セットをプレインストールします。

しかし、これは1つのドキュメントと1つの文字エンコーディングの状況しか解決できません。私のドキュメントに日本語、フランス語、ドイツ語、ロシア語、中国語が含まれているとしたら、どう思いますか?

Unicode

そのため、Unicode、Universal Code、SingleCodeとも呼ばれる別のUnicodeが作成されました

Unicode文字セットは、現在人間が使用しているすべての文字をカバーし、各文字には均一な番号が付けられ、一意の文字コードが割り当てられます。この種のことは誰かが行う必要があります。そうしないと、均一性が失われます。

みんなをより明確にするために私が説明するいくつかの用語があります。

  • 文字:実際、英語の文字と同じように、または私たちの中国語は文字と呼ばれています
  • 文字セット:それは文字と数字のセットです
  • 文字コード:文字セット内の文字に対応する番号、またはたとえばASCII文字セット内の番号です。Aの文字コードは65です。
  • 文字エンコーディング:文字セット内の文字と数字の間のマッピング関係に従って、バイトストリームへの変換の実現

Unicodeの場合、以前のエンコーディングとは1つ異なり、文字セットとエンコーディングが分離されます。

ASCIIエンコーディング、GBKエンコーディングなどの以前のエンコーディング、それらの文字セット、およびエンコーディングの実装は結びついています。以前のエンコーディングは実際にはルックアップテーブルであり、この文字と対応する固定バイナリを格納するための固定テーブルがあることを理解できます。たとえば、Aに対応する番号は65であり、そのバイナリシーケンスは01000001です。

Unicodeは異なります。文字セットと文字エンコードの実装を分離します。たとえば、Aに対応する番号は65ですが、対応するバイナリシーケンスは必ずしもそうではありません。特定の文字エンコードによって異なります。UTF-8エンコードの場合は、 01000001、UTF-16エンコーディング(ビッグエンディアン)の場合は00000000 01000001

これが実際にUTF-16の代わりにUTF-8を使用する理由です。UTF-16エンコーディングはストレージ効率が低く、少なくとも2バイトが使用され、C言語の多くの関数は0x00バイトを次のように使用することがわかります。文字列の停止文字が解析されるので、可変長の各文字を1〜4バイトでエンコードするUTF-8を作成しました。エンコードの仕方は説明しませんが、チェックしてみてください。 。

やっと

これまで、文字化けしたコードの原因を明らかにし、文字エンコードが多い理由もわかっています。結局、言語はたくさんあり、ASCIIが最初にリリースされましたが、他の国では十分ではないため、個別に拡張しました。

しかし、エンコーディングが多く、国間の統一性や互換性を実現することは難しいため、国際機関は後に、すべての文字を統合するUnicode文字セットを策定し、文字セットとエンコーディングを分離してエンコーディングをより柔軟にしました。来て。

ちなみに、英語で文字化けがないのは、ほとんどの文字セットがASCII拡張子に基づいているため、ASCIIと互換性があるためです。

この号はもっと興味深い人気の科学シリーズと見なされるべきですが、私はまだあなたの賞賛を切望しています。

トーク

Ao Bingは、インタビューのエッセイを1,630ページの電子書籍にまとめました。

すべての言葉の本質である乾物がいっぱい。内容は以下のとおりです。また、レビュー中に要約したインタビューの質問と再開テンプレートも、すべての人に無料で提供されています。

リンク:https//pan.baidu.com/s/1ZQEKJBgtYle3v-1LimcSwgパスワード:wjk6

私はアオビンです。知っているほど、知らないことが多くなります賞賛お気に入りコメントをありがとうございます。次号でお会いしましょう!


記事は継続的に更新され、検索マイクロチャネル「Third Prince Ao propionate」を初めて読んだり、返信したりすることができます[データ]一次メーカーはインタビューデータを持っており、テンプレートを再開する準備ができてい ます。GitHubhttps ://github.com/JavaFamilyはすでに含まれています、主要工場へのインタビューのための完全なテストサイトがあり、スターは大歓迎です。

おすすめ

転載: blog.csdn.net/qq_35190492/article/details/109091892