需要帮助理解UTF编码

Del*_*lta 2 c# encoding utf-8 utf-16 utf

你好,我注意到当我使用UTF-8编码(没有BOM)保存文本文件时,我能够在C#上使用UTF-16编码完美地读取它.现在这让我有点困惑,因为UTF-8只使用了8位,对吧?utf-16对每个字符都需要16位.

现在想象一下,我把这个文件中的字符串"ab"写成UTF-8,那么字母"a"有一个字节,"b"有另一个字节.

好的,但是在使用UTF-16字符集时如何读取这个UTF-8文件呢?我看到,在读取文件的方式中,"AB"的两个字节会被误认为成只有一个包含两个字节字符了.因为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();
}
Run Code Online (Sandbox Code Playgroud)

And*_* dh 5

查看http://www.joelonsoftware.com/articles/Unicode.html,它将回答您的所有unicode问题