11

誰か簡潔な定義を教えてくれませんか

  • ユニコード
  • UTF7
  • UTF8
  • UTF16
  • UTF32
  • コードページ
  • Ascii/Ansi/Windows 1252 との違い

私はウィキペディアのリンクや信じられないほどの詳細を求めているのではなく、Unicode の巨大なバリエーションがどのように、なぜ生じたのか、そしてプログラマーとして関心を持つべき理由についての簡単な情報を求めているだけです。

4

7 に答える 7

13

本当に簡単な紹介 が必要な場合: Unicode in 5 Minutes

または、ワンライナーを使用している場合:

  • Unicode: 0 ~ 1,114,111 の範囲の整数 (「コード ポイント」) への文字のマッピング。使用されているほぼすべての文字言語をカバー
  • UTF7:上位ビットがクリアされたバイト ストリームへのコード ポイントのエンコード。一般的には使用しない
  • UTF8:各文字を表すのに 1、2、3、または 4 バイトを使用するバイト ストリームへのコード ポイントのエンコーディング。エンコーディングの主な選択肢である必要があります
  • UTF16:コード ポイントをワード ストリーム (16 ビット単位) にエンコードしたもので、各文字を表すのに 1 つまたは 2 つの単語 (2 または 4 バイト) を使用する場合があります。
  • UTF32:各文字が正確に 1 単位 (4 バイト) を取る 32 ビット単位のストリームへのコード ポイントのエンコード。内部表現に使用されることもある
  • コードページ:文字を整数に割り当てる DOS および Windows のシステム、および関連するエンコーディング。それぞれが言語のサブセットのみをカバーしています。これらの割り当ては通常、Unicode の割り当てとは異なることに注意してください。
  • ASCII:非常に一般的な整数への文字の割り当て、およびバイトへの直接エンコーディング (上位ビットはすべてクリア)。割り当ては Unicode のサブセットであり、エンコーディングは UTF-8 のサブセットです。
  • ANSI:標準化団体
  • Windows 1252:一般的に使用されるコードページ。ISO-8859-1 または Latin-1 に似ていますが、同じではなく、この 2 つはしばしば混同されます。

なんで気にするの?使用中の文字セットとエンコーディングを知らなければ、特定のバイト ストリームが表す文字が実際にはわからないからです。たとえば、バイト 0xDE をエンコードできます

  • Þ (ラテン大文字のソーン)
  • Fi (ラテン小文字合字 FI)
  • ή (ギリシャ語の小文字 ETA WITH TONOS)
  • または、使用するエンコーディングと文字セットに応じて、その他の 13 文字。
于 2009-09-22T17:16:22.427 に答える
6

よく参照される Joelの記事と同様に、.NET 中心の視点から見た独自の記事があります。

于 2009-09-21T15:09:38.833 に答える
3

はい、ある程度の洞察を得ましたが、間違っている可能性がありますが、理解するのに役立ちました。

ちょっとテキストを取ってみましょう。コードページは、一連のバイトとしてコンピューターの RAM に保存されます。そのため、メモ帳のようなものがそのコードページに付属しており、バイトを画面に変換すると、大量のゴミ、逆さまの疑問符などが表示されます。これは、バイトを読み取るアプリケーションが正しいデータを使用していないというだけで、データが文字化けすることを意味するものではありません。コードページ。一部のアプリケーションは、使用する正しいコードページを他のアプリケーションよりも賢く検出し、メモリ内の一部のバイト ストリームには、バイト オーダー マークを表す BOM が含まれており、これにより、使用する正しいコードページを宣言できます。

UTF7、8 16 などはすべて、異なる形式を使用した異なるコードページです。

異なるコードページを使用してバイトとして格納された同じファイルは、バイトが異なる方法で格納されるため、異なるファイルサイズになります。

また、Windows 1252 は別のコードページであるため、Windows 1252 と実際には違いはありません。

よりスマートな答えについては、リンクのいずれかを試してください。

于 2009-09-21T15:11:24.410 に答える
2

ここで、ジョエル自身からのこの素晴らしい説明を読んでください。

すべてのソフトウェア開発者が絶対に、積極的に Unicode と文字セットについて知っておく必要がある絶対最小値 (言い訳はありません!)

于 2009-09-21T15:00:41.353 に答える
2

他の人は、最初に十分な参考文献をすでに指摘しています。私は本当のダミーのガイドをリストしているのではなく、むしろ Unicode Consortium ページからのいくつかのポインターをリストしています. Unicode コンソーシアムのページで、さまざまなエンコーディングを使用するより核心的な理由を見つけることができます。

Unicode FAQは、質問の一部 (すべてではない) に答えるのに十分な場所です。

Unicode が存在する理由についてのより簡潔な答えは、Unicode Web サイト自体の初心者のセクションにあります。

Unicode は、プラットフォーム、プログラム、言語に関係なく、すべての文字に一意の番号を提供します。

UTF-8、UTF-16、または UTF-32 を使用する技術的な理由に関する限り、答えはTechnical Introduction to Unicode にあります。

UTF-8 は、HTML および同様のプロトコルで一般的です。UTF-8 は、すべての Unicode 文字をバイトの可変長エンコーディングに変換する方法です。これには、使い慣れた ASCII セットに対応する Unicode 文字が ASCII と同じバイト値を持ち、UTF-8 に変換された Unicode 文字を大規模なソフトウェアの書き換えなしで多くの既存のソフトウェアで使用できるという利点があります。

UTF-16 は、文字への効率的なアクセスとストレージの経済的な使用のバランスをとる必要がある多くの環境で人気があります。それはかなりコンパクトで、使用頻度の高いすべての文字が 1 つの 16 ビット コード ユニットに収まりますが、他のすべての文字は 16 ビット コード ユニットのペアを介してアクセスできます。

UTF-32 は、メモリ スペースが問題にならない場合によく使用されますが、固定幅の単一コード単位で文字にアクセスする必要があります。UTF-32 を使用する場合、各 Unicode 文字は単一の 32 ビット コード単位でエンコードされます。

3 つのエンコード形式はすべて、各文字に最大 4 バイト (または 32 ビット) のデータが必要です。

一般的な経験則では、アプリケーションでサポートされている主な言語がインダス川の西側で話されている場合は UTF-8 を使用し、反対 (インダス川の東側) で話されている場合は UTF-16 を使用し、文字の使用が心配な場合は UTF-32 を使用します。均一収納付き。

ところで、UTF-7 は Unicode 標準ではなく、主にメール アプリケーションで使用するために設計されました。

于 2009-09-21T15:36:59.683 に答える
0

私はウィキペディアのリンクや信じられないほどの詳細を求めているのではなく、Unicode の巨大なバリエーションがどのように、なぜ生じたのか、そしてプログラマーとして関心を持つべき理由についての簡単な情報を求めているだけです。

まず、「ユニコードのバリエーション」はありません。Unicode は、文字にコード ポイント (整数) を割り当てるための標準です。UTF8 は、これらの整数をバイトとして表現する最も一般的な方法です!

なぜプログラマーとして気にする必要があるのですか?

  • これが分かれば楽しい!
  • エンコーディングの基本的な理解がなければ、バグのあるコードを簡単に作成できます。

myByteArray例:どこかからByteArray を受け取り、それが文字を表していることがわかっています。次に実行するmyByteArray.toString()と、文字列が得られますHello。あなたのプログラムはうまくいきます!コードを発送した翌日、ドイツの顧客から電話がありました。「問題が発生しました。正しく表示されません!」。コードのデバッグを開始すると、エンコーディングの基本的な理解がなければかなり途方に暮れます。ただし、エンコーディングを理解していれば、エラーはおそらく次のようなものであることがわかります。 を実行するmyByteArray.toString()と、プログラムは、文字列がデフォルトのシステム エンコーディングでエンコードされていると想定しました。でもそうじゃなかったかも!多分それはUTF8で、システムはLATIN-SOMETHINGなので、代わりに実行する必要がありましmyByteArray.toString("UTF8")た!

資力:

他の人が示唆している Joel の記事はお勧めしません。関係のない情報がたくさんある長い記事です。数年前に読んだのですが、重要でない詳細がたくさんあるので、その本質が頭に浮かびませんでした。

すでに述べたように、 http://wiki.secondlife.com/wiki/Unicode_In_5_Minutesは、Unicode の本質を理解するのに最適な場所です。

UTF8 のような可変長エンコーディングを実際に理解したい場合は、https://www.tsmean.com/articles/encoding/unicode-and-utf-8-tutorial-for-dummies/をお勧めします。

于 2021-09-18T14:13:15.603 に答える