私はこれにもっとウェブのような方法で答えたいと思います。それに答えるためには、少し歴史が必要です。Joel Spolskyは、すべての開発者が Unicode 文字エンコーディングについて最低限知っておくべきことについて、非常に優れた紹介記事を書きました。looong
これは多少の答えになるので、ここで我慢してください。:)
歴史として、そこからのいくつかの引用を示します: (Joel に感謝します! :) )
重要な唯一の文字はアクセントのない古き良き英字であり、32 から 127 までの数字を使用してすべての文字を表すことができる ASCII と呼ばれるコードがありました。スペースは 32、文字「A」は 65 などでした。これは便利に 7 ビットで格納できます。当時のほとんどのコンピューターは 8 ビット バイトを使用していたので、考えられるすべての ASCII 文字を格納できるだけでなく、1 ビットを余裕を持って使用することができました。
そして、あなたが英語を話す人であると仮定すると、すべてが良かった. バイトには最大 8 ビットの余地があるため、多くの人が「128 ~ 255 のコードを自分の目的に使用できる」と考えるようになりました。問題は、多くの人が同時にこの考えを持っていて、128 から 255 までの空間で何をどこに置くべきかについて独自の考えを持っていたことです。
そのため、「OEM 文字セット」が PC とともに配布されましたが、これらはまだすべて異なり、互換性がありませんでした。そして、私たちの現代的な驚きに - それはすべて大丈夫でした! 当時はまだインターネットがなく、ロケールが異なるシステム間でファイルを交換することはめったにありませんでした。
ジョエルは次のように続けます。
実際、人々がアメリカ国外で PC を購入し始めるとすぐに、あらゆる種類のさまざまな OEM キャラクター セットが考案され、それぞれの目的のために上位 128 のキャラクターが使用されました。最終的に、この OEM の自由は ANSI 標準に成文化されました。ANSI 標準では、ASCII とほとんど同じである 128 未満で何をするかについて誰もが合意していましたが、住んでいる場所に応じて、128 以上の文字を処理するさまざまな方法がありました。これらの異なるシステムはコード ページと呼ばれていました。
そして、最終的に「Windows コード ページ」はこうして誕生しました。それらは、実際には DOS コード ページによって「親」にされていました。そして、ユニコードが誕生しました!:)そしてUTF-8は「Unicodeコードポイントの文字列を格納するための別のシステム」であり、実際には「0〜127のすべてのコードポイントが1バイトに格納され」、 ASCIIと同じです。Unicode と UTF-8 の詳細についてはこれ以上説明しませんが、一般的にBOM、エンディアン、および文字エンコーディングについては読んでおく必要があります。
「ANSI の陰謀」について、Microsoft は実際に、用語集でWindows-1252 の誤ったラベル付けを認めています。
いわゆる Windows 文字セット (正確には WinLatin1、または Windows コード ページ 1252) は、これらの位置の一部を印刷可能な文字に使用します。したがって、Windows の文字セットは ISO 8859-1 と同一ではありません。Windows 文字セットは「ANSI 文字セット」と呼ばれることがよくありますが、これは深刻な誤解を招きます。ANSI によって承認されていません。
そのため、 Windows 文字セットを参照するときの ANSI は ANSI 認定ではありません。:)
Jukkaが指摘したように(クレジットは素晴らしい答えのためにあなたに行きます)
Windows-1252 ISO Latin 1。文字エンコーディングとして ISO-8859-1 とも呼ばれ、コード範囲 0x80 から 0x9F は ISO-8859-1 (いわゆる C1 コントロール) の制御文字用に予約されています。 -1252 では、印刷可能な文字 (ほとんどが句読点) に割り当てられているコードもあれば、未定義のままになっているコードもあります。
ただし、私の個人的な意見と技術的な理解では、Windows-1252 と ISO-8859-1 はどちらもWeb エンコーディングではありません。:) そう:
Web ページの場合、コンテンツのエンコーディングとして UTF-8 を使用してください。そのため、データを UTF-8 として保存し、 HTTP ヘッダーで「吐き出す」: Content-Type: text/html; charset=utf-8
.
HTML content-type メタタグと呼ばれるものもあります
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
。ブラウザがこのタグに遭遇したときに実際に行うことは、宣言されたエンコーディングでドキュメントを再解釈できるように、HTML ドキュメントの最初からやり直すことです。これは、'Content-type' ヘッダーがない場合にのみ発生します。
システムのユーザーがシステムから生成されたファイルを必要とする場合は、他の特定のエンコーディングを使用してください。たとえば、一部の欧米ユーザーは、Excel で生成されたファイル、または Windows-1252 の CSV を必要とする場合があります。この場合は、そのロケールでテキストをエンコードしてから fs に保存し、ダウンロード可能なファイルとして提供します。
HTTP の設計で注意すべきことがもう 1 つあります。コンテンツ エンコーディングの配布メカニズムは次のように機能する必要があります。
I.クライアントは、'Accept' および 'Accept-Charset'リクエスト ヘッダーを介して、特定のコンテンツ タイプとエンコーディングで Web ページをリクエストします。
Ⅱ.次に、サーバー (または Web アプリケーション) は、そのエンコーディングと文字セットにトランスコードされたコンテンツを返します。
これは、ほとんどの最新の Web アプリでは当てはまりません。Web アプリケーションがコンテンツを UTF-8 として提供する (クライアントを強制する) と、実際にはどうなるでしょうか。これが機能するのは、ブラウザーが実際に期待したものではなく、応答ヘッダーに基づいて受信したドキュメントを解釈するためです。
私たちはすべて Unicode に移行する必要があります。そのため、できる限り UTF-8 を使用してコンテンツを配布してください。そうしないと、インターネットの長老たちに悩まされることになります。:)
PS Web ページでの MS Windows 文字の使用に関するその他の優れた記事は、こことここにあります。