Unicode、UTF、ASCII、ANSI形式の違い


351

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

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


参照するのに最適なサイトは次のとおりです:msdn.microsoft.com/en-us/library/dd374081
VS.85).aspx

6
非常に関連:UTF-8とUnicode
Tobias Kienzler 2013


回答:


470

リストを下に行く:

  • " Unicode」はエンコーディングではありませんが、残念ながら、多くのドキュメントでは、特定のシステムがデフォルトで使用するUnicodeエンコーディングを参照するために、それを不正確に使用しています。WindowsおよびJavaでは、これは多くの場合UTF-16を意味します。他の多くの場所では、UTF-8を意味します。正しくは、Unicodeは特定のエンコーディングではなく、抽象文字セット自体を指します。
  • UTF-16:「コード単位」あたり2バイト。これは.NETの文字列のネイティブ形式であり、一般にWindowsとJavaの文字列です。Basic Multilingual Plane(BMP)外の値は、サロゲートペアとしてエンコードされます。これらはするために使用される比較的ほとんど使用されませんが、現在多くのコンシューマアプリケーションはサポート絵文字ために非BMPの文字を認識する必要があります。
  • UTF-8:可変長エンコーディング、コードポイントあたり1〜4バイト。ASCII値は、1バイトを使用してASCIIとしてエンコードされます。
  • UTF-7:通常、メールのエンコードに使用されます。おそらく、それが必要だと思ってメールをしていないのは間違いです。(それは、ニュースグループなどに投稿する人々の私の経験です-メールの外、それは実際にはあまり広く使われていません。)
  • UTF-32:コードポイントごとに4バイトを使用する固定幅エンコーディング。これはあまり効率的ではありませんが、BMPの外での生活を楽にします。MiscUtilライブラリのUtf32String一部として.NET クラスがあります。(十分にテストされていませんのでご注意ください。)
  • ASCII:下位7ビットのみを使用するシングルバイトエンコーディング。(Unicodeコードポイント0〜127。)アクセントなしなど。
  • ANSI:固定のANSIエンコーディングはありません-たくさんあります。通常、人々が「ANSI」を言うとき、それらはEncoding.Defaultを介して取得される「私のシステムのデフォルトのロケール/コードページ」を意味し、多くの場合Windows-1252ですが、他のロケールの場合もあります。

私のUnicodeページUnicodeの問題をデバッグするためのヒントがもっとあります

コードの他の大きなリソースは unicode.orgです。これには、これまでに処理できる以上の情報が含まれています。おそらく最も役立つビットはコードチャートです。


6
Microsoftの8ビットコードページに「ANSI」という用語を当てはめると、誤った名称になります。それらはANSI標準化のために提出されたドラフトに基づいていましたが、ANSI自体がそれらを標準化したことはありません。Windows-1252(最も一般的に「ANSI」と呼ばれるコードページ)はISO 8859-1(Latin-1)に似ていますが、Windows-1252には0x80..0x9Fの範囲の印刷可能な文字があり、ISO 8859-1その範囲の制御文字があります。Unicodeにもその範囲の制御文字があります。en.wikipedia.org/wiki/Windows_code_page
キーストンプソン

1
@ jp2code:私はそうは思いません-しかし、「HTTPを介してWebサーバーから送り返されるコンテンツ」と「電子メールを介して送信されるコンテンツ」を区別する必要があります。電子メールを送信するのはWebページのコンテンツではなく、おそらくその背後にあるアプリです。WebコンテンツはUTF-8が最適です。メールの内容 UTF-7でもかまいませんが、最近はUTF-8で保持しても問題ないと思います。
Jon Skeet

2
BMPの外側のコードポイントはサロゲートペアで2つのコード単位(4バイト)としてエンコードされるため、UTHO-16、IMHOでは「コード単位あたり2バイト」と言います。
Ludovic Kuty

1
UTF-16LE(.NET内)とBEの違い、およびBOMの概念が欠落しています。
Maarten Bodewes

2
@Andrew:いいえ、(一般的な)エンコードマーカーはありません。Windows 1252は、Unicode BOMを表すことができません。それは、いずれにしても、1バイト/文字のエンコーディングにすぎないため、意味がありません。
Jon Skeet

68

文字エンコーディングの使用を開始するための参考資料: Joel on Software:The Absolute Minimum Every Software Developer Absolutely、Positively Positive Known Unicode and Character Sets(No Excuses!)

ところで、ASP.NETはそれとは何の関係もありません。エンコーディングはユニバーサルです。


7
記事が書かれてから6年後、ここで回答しました。記事が書かれてから8年後に読んだ。14年経ちましたが、今でも読み物です。それは私の人生の半分以上です。信じられない。
Dave Knise 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.