今天我看到一段代码,其中使用了
UTF8Encoding.UTF8.GetBytes
和 Encoding.UTF8.GetBytes
。它们之间有什么区别吗?UTF8Encoding.UTF8.GetBytes
和 Encoding.UTF8.GetBytes
。它们之间有什么区别吗?完全没有区别。
Encoding.UTF8
就是 UTF8Encoding
。
从MSDN(Encoding.UTF8
):
此属性返回一个UTF8Encoding对象
您可以直接调用UTF8Encoding.GetBytes
,而不是Encoding.UTF8.GetBytes
。
至少有一个区别。Encoding.UTF8会写入BOM,而UTF8Encoding默认情况下不会。看看这个:
using System;
using System.Text;
class UTF8EncodingExample {
public static void Main() {
UTF8Encoding utf8 = new UTF8Encoding();
UTF8Encoding utf8EmitBOM = new UTF8Encoding(true);
Console.WriteLine("utf8 preamble:");
ShowArray(utf8.GetPreamble());
Console.WriteLine("utf8EmitBOM:");
ShowArray(utf8EmitBOM.GetPreamble());
Console.WriteLine("Encoding.UTF8 preamble:");
ShowArray(Encoding.UTF8.GetPreamble());
}
public static void ShowArray(Array theArray) {
foreach (Object o in theArray) {
Console.Write("[{0}]", o);
}
Console.WriteLine();
}
}
UTF8Encoding.ASCII
的能力似乎很奇怪。 - user247702UTF8Encoding.UTF8
?)另外,“了解编码知识”属于特定编码的概念角色,因此能够从“这里”到“那里”并不可怕。 - Jon HannaEncoding
的文档,因为 UTF8Encoding
唯一不继承也没有复写的成员是构造函数。可以说,根本不需要公开类型 UTF8Encoding
,而可以通过 Encoding
的静态方法返回 Encoding
,并隐藏实现来提供构造函数的所有变体。 - Jon Hanna这只是访问 UTF8Encoding
类并调用其静态成员 GetBytes
的两种不同方式。
new UTF8Encoding(true)
,这将发出一个BOM。 - user247702UTF8Encoding.UTF8
是否与Encoding.UTF8
不同。 - user247702