こんにちは、UTF-8 エンコーディング (BOM なし) を使用してテキスト ファイルを保存すると、C# で UTF-16 エンコーディングを使用して完全に読み取ることができることに気付きました。UTF-8 は 8 ビットしか使用しないため、これで少し混乱しました。そして、utf-16 は各文字に 16 ビットを使用します。
ここで、このファイルに文字列「ab」が UTF-8 として書き込まれていると想像してください。文字「a」用に 1 バイト、「b」用にもう 1 バイトあります。
わかりましたが、UTF-16 文字セットを使用しているときに、この UTF-8 ファイルを読み取るにはどうすればよいでしょうか? 私の見方では、ファイルの読み取り中に、「ab」の 2 バイトが、両方のバイトを含む 1 文字のみであると誤解されます。UTF-16 はこれらの 2 バイトを必要とするためです。
これは私がそれを読む方法です(t.txtはUTF-8としてエンコードされています):
using(StreamReader sr = new StreamReader(File.OpenRead("t.txt"), Encoding.GetEncoding("utf-16")))
{
Console.Write(sr.ReadToEnd());
Console.ReadKey();
}