web-dev-qa-db-ja.com

Unicode、UTF、ASCII、ANSIフォーマットの違い

UnicodeUTF8UTF7UTF16UTF32ASCII、およびANSIのエンコーディングの違いは何ですか?

プログラマにとってこれらはどのように役立ちますか。

325
web dunia

あなたのリストを下に行く:

  • " Unicode "はエンコーディングではありませんが、残念ながら、多くのドキュメントでは、特定のシステムでデフォルトで使用されているUnicodeエンコーディングを参照するために不正確に使用されています。 WindowsとJavaでは、これはしばしばUTF-16を意味します。他の多くの場所では、それはUTF-8を意味します。正しくは、Unicodeは特定のエンコーディングではなく、抽象文字セット自体を指します。
  • UTF-16 : "コード単位"あたり2バイト。これは.NET、そして一般にWindowsとJavaにおける文字列のネイティブフォーマットです。 基本多言語平面 (BMP)の外側の値は、サロゲートペアとしてエンコードされます。 (これらは比較的めったに使用されません - 非常に少数の開発者がそれらを正しく理解しているので、これは良い仕事です、私は疑います。私がすることを非常に疑います。)
  • UTF-8 :可変長エンコーディング。コードポイントあたり1〜4バイト。 ASCII値は、1バイトを使用してASCIIとしてエンコードされます。
  • UTF-7 :通常メールのエンコードに使用されます。あなたがそれを必要としていて、あなたがメールをしていないと思うなら、あなたは間違っているのかもしれません。 (それは、ニュースグループなどに投稿する人々の私の経験にすぎません - メール以外で、実際にはあまり広く使用されていません。)
  • UTF-32 :コードポイントごとに4バイトを使用する固定幅エンコーディング。これはあまり効率的ではありませんが、BMP以外での生活を楽にします。私は MiscUtil ライブラリの一部として.NETのUtf32Stringクラスを持っています。 (それはそれほど徹底的にテストされていません。
  • _ ascii _ :下位7ビットのみを使用するシングルバイトエンコーディング。 (Unicodeコードポイント0〜127)アクセントなしなど.
  • ANSI:固定ANSIエンコーディングはありません - たくさんあります。通常、人々が "ANSI"と言うとき、彼らは Encoding.Default によって得られる "私のシステムのデフォルトのロケール/コードページ"を意味しますが、しばしば Windows-1252 です。 。

私のUnicodeページ および Unicodeの問題をデバッグするためのヒント に関する詳細があります。

コードのもう1つの大きなリソースは unicode.org です。これには、これまで通り抜けることができないほど多くの情報が含まれています - おそらく最も有用な部分は コードチャート です。

439
Jon Skeet

文字エンコーディングを始めるための読み物: Joel on Software:絶対に最低限すべてのソフトウェア開発者は絶対に、Unicodeと文字セットについて知っておく必要があります(言い訳はできません!)

ちなみに - ASP.NETはそれとは関係ありません。エンコードは普遍的です。

62
Tomalak