私はこの質問から始めます:キャラクターとは何ですか?
- 論理的アイデンティティ:コードポイント。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-1252
れUTF-16
ますchar
。次に、バッファがに変換されUTF-8
ます。
コードポイント
いくつかのサンプルコードポイント:
- U + 0041はラテン大文字A(A)です
- U + 00A3はポンド記号(£)です
- U + 042Fはキリル文字の大文字ですYA(Я)
- U + 1D50Aは数学的なフラクトゥールキャピタルGです(