Hallo,我注意到当我使用UTF-8编码(无BOM)保存文本文件时,我可以在C#上使用UTF-16编码完美地读取它。现在这让我有点困惑,因为UTF-8只使用8位,对吧?而utf-16对每个角色都有16位。需要帮助了解UTF编码
现在想象一下,我在这个文件中有字符串“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();
}
UTF-8使用8位,当你处理的是英语 - 但如果你是在处理与其他语言的UTF-8可能是16,24,或甚至更多位。 – Sai 2011-06-11 04:27:56
UTF-16需要2或4个字节。 – tchrist 2011-06-11 15:14:04
@Sai,哦,我认为utf-8总是8位长,当使用16位时,它将被称为utf-16。所以我可以有16位,仍然使用utf-8而不是utf-16? – Delta 2011-06-11 15:48:21