2011-03-18 65 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

相關問題