UnicodeとUTF-8の違いを簡単に教えてください。


ベストアンサー

他の答えは正しくありません。

ユニコードは、確かに、ほぼすべてのワールドスクリプトの文字のリストが含まれています。ただし、これはUnicode標準の一部にすぎません:ユニバーサルコード化文字集合。 Unicode標準には、これらのUnicode文字のレンダリング、順序付け、正規化、およびエンコードのルールも含まれています。

UTF-8 はその1つです。 Unicodeをコンピューターテキストとして表すために使用される3つの標準文字エンコード(他はUTF-16およびUTF-32)。歴史的に、テキストファイルは通常、各バイトが1文字を表すバイトのシーケンスとしてエンコードされていました。ただし、バイトは256個の値のうちの1つしか取ることができないため、Unicodeではこれは不可能です。最も単純なUnicodeエンコーディングは UTF-32 で、文字ごとに4バイト(または32ビット)を使用します。ただし、これは、ストレージ、メモリ、および処理の使用において非効率的です。 1996年までは、すべてのUnicode文字を表すには2バイトで十分であると考えられていました(または期待されていました)が、その後、人々は漢字がいくつあるかを理解しました。その結果、JavaScriptなどの一部の言語では、文字を表すために2バイト( UCS-2 )が使用され、\ unicode {x1F60Eなどの文字を処理するときに問題が発生する可能性があります。 }。これを修正するために、UCS-2は UTF-16 に置き換えられ、一部の文字は two <で表されました。 / span> 1つではなく2バイトのコード単位。これにより、文字列の操作がより複雑になりますが(たとえば、文字列の長さの計算)、UTF-32よりも使用するスペースが少なくなります。

UTF-8 はUTF-16に似ていますが、コード単位がすべて1バイト(8ビット)の長さで、文字が1〜4個のコード単位で表される点が異なります。プレーンテキスト(つまりASCII)文字はすべて、通常の非Unicode文字列と同じ方法で1バイトで表されます。これには、レガシーASCIIテキストも有効なUTF-8であるという大きな利点があります。さらに、ASCIIを表すバイトは他の文字の表現には使用されないため、それらを検索するレガシープログラムを更新する必要はありません。これらの利点と、UTF-8が通常最もスペース効率の高い方法であるという事実が組み合わされています。 Unicodeテキスト(特に欧米のテキスト)を保存するということは、最近のWebページの大部分がUTF-8でエンコードされていることを意味します。

回答

テキスト処理プログラムは何かを出力する必要があります(そして何かをファイルに保存します)プログラムを相互運用させたい場合、たとえばテキスト処理プログラムがプリンターやスキャナードライバーと通信する場合、それらがどのように通信するかを説明する必要があります。そして、それを効率的に行いたいと思います。標準では、その相互通信が可能になります。そうしないと、MicrosoftWordのスマートクォートがCanonプリンターとHPスキャナーで機能しません。必要なものではありません…。

編集が追加されました:ユニコードが(構文ではなく)セマンティクスにどのように関連しているかについてのCometの回答を参照してください/表現)。これは、相互運用性についての私のポイントになります。キャラクターシーケンスを「意味のある」ものにする必要があります。そのため、Unicodeで表されるものとそうでないものがあります。ラテンアルファベットユーザー、キリルアルファベットユーザー、ギリシャアルファベットユーザー、トルコアルファベットユーザーはすべて「a」のような文字を持っていますが(一部のフォントでは区別でき、他のフォントでは区別できません)、これらの言語のライターはそれらを考慮します異なる文字(それらには意味上の違いがあります)。したがって、Unicodeはそれらを異なるコードポイントと見なします。それらは異なるセマンティクスを表し、異なるソートなどを行います。同じことが左右の引用符、および特定のアクセント文字にも当てはまります。一部の言語では、セマンティックの違いがあります。セマンティクスを正しく表現すると、ある種の相互運用性が得られます。

物事を絵画的に正しく表現すると、別の種類の相互運用性が得られます。ただし、Unicodeは2番目ではなく、最初の文字を目指しています。

Unicodeがホモグリフを単一の文字として表す場合、使用されているフォントに問題があり、意味の正確さが損なわれます。黒字フォントのラテン文字aは、ローマ字フォントのヘルベティック文字とは大きく異なります。また、傾斜とイタリックは必ずしも同じではありませんが、同じ場合もあります。

ブルガリアで看板を読むと、ほとんどの場合キリル文字にはラテン文字とは非常に異なるフォントを使用することがあるため、文字「a」のようなものであっても、それらが異なる文字であることは明らかです。しかし、そうでない場合もあります。ナンバープレートにBmが表示されている場合、英語でVtに変換されるのか、単にラテン語のBmであるのかを区別する必要があります。そのような単語全体を読んで、どの文字セットを使用するかを知る必要があります。使っている。

そして意味の正確さを得るのも難しいです。ドイツ語のsharp-sは小​​文字でのみ存在し、すべての「大文字」で単語を印刷する場合は2つのS文字を使用しますが、2つの「小文字」の文字を使用する単語とsharp-を使用する単語があります。 s。

したがって、ほとんどすべての標準と同様に、Unicodeは妥協点です。単語が正しく表現され、それを使用して送信できるように、正しい答えを取得しようとします。 「グラフィック」が正しいことを意図していないため、Unicodeシーケンスは、すべての詳細が規定された状態で、印刷された表現を明確に記述します。これを行うには、Unicode以上のものが必要です。

そして、そのパスをたどると、指定したい説明を出力(または入力)できないデバイスに問題が発生します。 200 dpiのプリンターはそれだけのことしかできず、1200dpiのプリンターが表現できる微妙な点が200dpiで失われるだけです。問題はあなたが気にするかどうかになりますか?実行する場合もあれば、実行しない場合もあります。

Unicodeは、適切なセマンティクスを必要としない多くの場合に適しています。単語を明確に送信したい場合、およびどのUnicodeコードポイントが使用されているかを知ることにより、その単語が自然言語でどのように綴られているかを知ることができます。ホモグリフの存在により、あいまいになる可能性がありますが、必須ではありません。あなたはユニコードで明白にすることができます。 がどのように印刷されるかの詳細をすべて表すことはできません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です