18

これは初歩的な質問ですが、なぜ異なるエンコーディング タイプがあるのか​​、そしてそれらの違いは何か (つまり、ASCII、utf-8 と 16、base64 など) を知りたいです。

4

3 に答える 3

17

理由はたくさんあると思いますが、要点は「何文字表示(エンコード)する必要があるのか​​?」です。たとえば、米国に住んでいる場合は、ASCIIを使用するとかなり遠くまで行くことができます。しかし、多くの郡では、ä、å、üなどの文字が必要です(SOがASCIIのみの場合、またはこのテキストをASCIIエンコードされたテキストとして読み込もうとすると、ä、å、üの場所に奇妙な文字が表示されます。 )中国、日本、タイ、その他の「エキゾチック」な国も考えてみてください。あなたが世界中で見たかもしれない写真のそれらの奇妙な数字はただの文字であり、きれいな写真ではないかもしれません。

異なるエンコーディングタイプの違いについては、それらの仕様を確認する必要があります。これがUTF-8のためのものです。

私はUTF-16に精通していません。違いについての情報があります。

Base64は、テキストデータを処理するように設計されたメディアを介して保存および転送する必要があるバイナリデータをエンコードする必要がある場合に使用されます。PHPを使用して何らかの電子メールシステムを作成したことがある場合は、おそらくBase64に遭遇したことがあります。

短い:コンピュータプログラムの多くの異なる言語へのユーザーインターフェイスのローカリゼーションをサポートするため。(プログラミング言語は依然として主にASCIIエンコードで見つかった文字で構成されていますが、たとえばJavaでは変数名でUTF-8エンコードを使用でき、ソースコードファイルは通常ASCIIエンコードテキスト以外のものとして保存されます。たとえばUTF- 8エンコーディング。)

要するにvol.2:さまざまな人が特定の観点から(または可能であれば視点がなくても)問題を解決しようとすると、結果はまったく異なる可能性があります。Joelのユニコード記事(以下のリンク)からの引用:「バイトには最大8ビットのスペースがあるため、多くの人が「コード128〜255を自分の目的に使用できる」と考えるようになりました。問題はたくさんありました。同時にこのアイデアを持っていた人の数もあり、128から255までのスペースのどこに何を置くべきかについて独自のアイデアを持っていました。」

すべての情報と議論をしてくれたJoachimとtchristに感謝します。これが私が今読んだ2つの記事です。(どちらのリンクも、以前にリンクしたページにあります。)数年前に最後に読んだときから、Joelの記事のほとんどの内容を忘れていました。私が望む主題への良い紹介。マークデービスはもう少し深く行きます。

于 2012-04-10T12:11:46.143 に答える
10

非常に多くの亜種が存在する本当の理由は、ユニコードコンソーシアムの登場が遅すぎたためです。

はじめにメモリとストレージは高価であり、1文字を格納するために8ビット以上(場合によっては7ビットのみ)のメモリを使用することは過剰であると見なされていました。したがって、ほとんどすべてのテキストは、1文字あたり7ビットまたは8ビットを使用して保存されました。明らかに、8ビットはすべての人間の言語の文字を表すのに十分なメモリではありません。単一の言語で使用されるほとんどの文字を表すには、かろうじて十分です(一部の言語では、それが不可能な場合もあります)。したがって、さまざまな言語(英語、ドイツ語、ギリシャ語、ロシア語など)が1文字あたり8ビットでテキストをエンコードできるように設計された多くの異なる文字エンコード。結局のところ、単一のテキストファイル(そして通常は単一のコンピュータシステムでさえ)は単一の言語でしか使用されないでしょう?

これは、文字のあらゆる種類の数字への単一の合意されたマッピングがない状況につながりました。多くの異なる互換性のないソリューションが作成され、実際の中央制御は存在しませんでした。一部のコンピュータシステムはASCIIを使用し、他のコンピュータシステムはEBCDIC(より正確には、EBCDICの多くのバリエーションの1つ)、ISO-8859- *(またはその多くの派生物の1つ)、または今ではほとんど聞かれないエンコーディングの大きなリストのいずれかを使用しました。

最後に、ユニコードコンソーシアムはその単一のマッピングを作成するタスクにステップアップしました(有用であるがこの回答の範囲外である多くの補助データと一緒に)。

ユニコードコンソーシアムが最終的にコンピューターが表す可能性のある文字のかなり包括的なリストを作成したとき(具体的なニーズに応じて、それらをバイナリデータにエンコードするためのいくつかのエンコードスキームとともに)、他の文字エンコードスキームはすでに広く使用されていました。これにより、Unicodeとそのエンコーディング(UTF-8、UTF-16)の採用が大幅に遅くなりました。

最近では、テキストを表現したい場合、最善の策は、すべてのUnicode文字を表現できる数少ないエンコーディングの1つを使用することです。UTF-8とUTF-16を合わせると、すべてのユースケースの99%で十分です。UTF-32は、他のほとんどすべてをカバーします。明確にするために、すべてのUTF-*エンコーディングはすべての有効なUnicode文字をエンコードできます。ただし、UTF-8とUTF-16は可変幅エンコーディングであるため、すべてのユースケースに最適であるとは限りません。これらのエンコーディングを処理できないレガシーシステムと対話できる必要がない限り、最近では他のものを選択する理由はほとんどありません。

于 2012-04-10T12:59:12.967 に答える
2

主な理由は、より多くの文字を表示できるようにするためです。インターネットが黎明期にあったとき、いつの日か世界中のすべての国、すべての言語の人々がインターネットを使用するようになるとは誰も予想していませんでした。したがって、小さな文字セットで十分でした。次第に、限定的で英語中心であることが明らかになり、より大きな文字セットの需要が高まりました。

于 2012-04-10T12:18:31.063 に答える