2

私が本当に理解したことのないことの1つは、文字エンコードの概念です。エンコーディングがメモリとコードで処理される方法は、インターネットから例をコピーするだけで、それが何をするのかを真に理解することなく、しばしば私を困惑させます。より多くの人が(私を含めて)正しく理解するために時間をかける必要があることは、本当に重要で見過ごされがちなテーマだと思います。

さまざまなタイプの文字エンコードを学習し、それらの間で変換するための、ある程度の優れたリソースを探しています(できればC#で)。本とオンラインリソースの両方を歓迎します。

ありがとう。


編集1:

これまでの回答ありがとうございます。特に、.NETがエンコーディングを処理する方法に関する詳細情報を探しています。私はこれが曖昧に見えるかもしれないことを知っていますが、私は本当に何を求めるべきかわかりません。C#文字列クラスでエンコーディングがどのように表現されるか、クラス自体がさまざまなエンコーディングタイプを管理できるのか、それとも別のクラスがあるのか​​、興味がありますか?

4

3 に答える 3

2

私はこの質問から始めます:キャラクターとは何ですか?

  • 論理的アイデンティティ:コードポイント。Unicodeは、ビット/バイト形式に必ずしも関連しない番号を各文字に割り当てます。エンコーディング(UTF-8など)は、バイト値へのマッピングを定義します。
  • ビットとバイト:エンコードされた形式。コードポイントごとに1バイト以上、使用されるエンコーディングによって決定される値。
  • 画面に表示されるもの:書記素。書記素は、1つ以上のコードポイントから作成されます。これは、物事のプレゼンテーションの最後にあるものです。

in.txtこのコードはからwindows-1252に変換されUTF-8、として保存されout.txtます。

using System;
using System.IO;
using System.Text;
public class Enc {
  public static void Main(String[] args) {
    Encoding win1252 = Encoding.GetEncoding(1252);
    Encoding utf8 = Encoding.UTF8;
    using(StreamReader reader = new StreamReader("in.txt", win1252)) {
      using(StreamWriter writer = new StreamWriter("out.txt", false, utf8)) {
        char[] buffer = new char[1024];
        while(reader.Peek() > 0) {
          int r = reader.Read(buffer, 0, buffer.Length);
          writer.Write(buffer, 0, r); 
        }
      }
    }
  }
}

ここで2つの変換が発生します。まず、バイトはから(リトルエンディアンだと思います)からバッファにデコードさwindows-1252UTF-16ますchar。次に、バッファがに変換されUTF-8ます。

コードポイント

いくつかのサンプルコードポイント:

  • U + 0041はラテン大文字A(A)です
  • U + 00A3はポンド記号(£)です
  • U + 042Fはキリル文字の大文字ですYA(Я)
  • U + 1D50Aは数学的なフラクトゥールキャピタルGです(
于 2009-09-11T14:25:06.353 に答える
2

ウィキペディアには、一般的な文字エンコードについてのかなり良い説明があります:http: //en.wikipedia.org/wiki/Character_encoding

最も人気のある文字エンコードの1つであるUTF-8の詳細を探している場合は、UTF-8とUnicodeのFAQを読む必要があります。

そして、すでに指摘したように、「すべてのソフトウェア開発者は絶対に、Unicodeと文字セットについて積極的に知っておく必要があります(言い訳はありません!)」は非常に優れた初心者向けチュートリアルです。

于 2009-09-11T11:28:39.067 に答える
1

有名なジョエルの記事「すべてのソフトウェア開発者は絶対に、Unicodeと文字セットについて絶対に知っておく必要があります(言い訳はありません!)」 http://www.joelonsoftware.com/articles/Unicode.htmlがあります。

編集:それはテキスト形式に関するものですが、読み直してみると、HTMLエンコードやURLエンコードなどにもっと興味があると思いますか?これは、htmlまたはURL内で重要な意味を持つ特殊文字をエスケープするためのものです(たとえば、htmlの<と>、またはurlの?と=)

于 2009-09-11T11:14:02.737 に答える