2011-03-18 64 views

回答

11

没有任何区别。

Encoding.UTF8UTF8Encoding

从MSDN(Encoding.UTF8):

此属性返回UTF8Encoding对象,而不是UTF8Encoding.UTF8.GetBytes

,你可以简单地调用UTF8Encoding.GetBytes

+0

很好的说明+1 – Aidiakapi 2011-03-18 12:12:58

+0

诚然,文档,但当前文档(.NET框架4.5)说,它等同于':检查了这一点新的UTF8Encoding(true)',它将发出一个BOM。 – Stijn 2014-09-16 07:52:46

+0

此外,@ JonHanna的答案似乎更好地解决了实际问题:“UTF8Encoding.UTF8”与“Encoding.UTF8”是否有所不同。 – Stijn 2014-09-16 07:59:19

3

这些只是访问UTF8Encoding类的两种不同方法,并将其称为其静态成员GetBytes

6

UTF8Encoding从编码中继承它的静态UTF8属性,所以它们实际上是相同的属性。

+0

我猜这些类的设计出了问题。调用'UTF8Encoding.ASCII'的能力看起来很奇怪。 – Stijn 2014-09-16 08:03:07

+0

@Stijn不是非常。首先,你为什么? (为什么你甚至会为此烦心地调用'UTF8Encoding.UTF8'),另一方面,“了解编码的东西”属于特定编码的概念角色,所以为了能够从“这里”到“那里”不可怕。 – 2014-09-16 09:22:05

+0

当然,你不会这样做,但它确实会造成课堂消费者的困惑。编码已经是一个复杂的话题,因此,必须彻底阅读互联网上的文档和其他资源,以确保我的理解是正确的,这是非优化设计的一个标志。 – Stijn 2014-09-16 09:28:22

6

至少有一个区别。 Encoding.UTF8将写入BOM,而UTF8Encoding不会(默认)。当时(.NET Framework 4中)没有提到它

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(); 
    } 
} 
+0

我知道他们在这方面有所不同,只是不记得哪个会写BOM。谢谢! – 2015-09-09 12:18:57

+0

尽管静态'.UTF8'属性使用默认的构造函数,不管它是从Encoding还是UTF8Encoding中调用。 – Nyerguds 2017-01-02 09:01:24

相关问题