今天我看到一個代碼,其中使用UTF8Encoding.UTF8.GetBytes
和Encoding.UTF8.GetBytes
。他們之間有什麼區別嗎?UTF8Encoding.UTF8.GetBytes和Encoding.UTF8.GetBytes是否有區別?
回答
沒有任何區別。
Encoding.UTF8
是UTF8Encoding
。
從MSDN(Encoding.UTF8
):
此屬性返回UTF8Encoding對象,而不是
UTF8Encoding.UTF8.GetBytes
,你可以簡單地調用UTF8Encoding.GetBytes
。
這些只是訪問UTF8Encoding
類的兩種不同方法,並將其稱爲其靜態成員GetBytes
。
UTF8Encoding從編碼中繼承它的靜態UTF8屬性,所以它們實際上是相同的屬性。
我猜這些類的設計出了問題。調用'UTF8Encoding.ASCII'的能力看起來很奇怪。 – Stijn 2014-09-16 08:03:07
@Stijn不是非常。首先,你爲什麼? (爲什麼你甚至會爲此煩心地調用'UTF8Encoding.UTF8'),另一方面,「瞭解編碼的東西」屬於特定編碼的概念角色,所以爲了能夠從「這裏」到「那裏」不可怕。 – 2014-09-16 09:22:05
當然,你不會這樣做,但它確實會造成課堂消費者的困惑。編碼已經是一個複雜的話題,因此,必須徹底閱讀互聯網上的文檔和其他資源,以確保我的理解是正確的,這是非優化設計的一個標誌。 – Stijn 2014-09-16 09:28:22
至少有一個區別。 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();
}
}
我知道他們在這方面有所不同,只是不記得哪個會寫BOM。謝謝! – 2015-09-09 12:18:57
儘管靜態'.UTF8'屬性使用默認的構造函數,不管它是從Encoding還是UTF8Encoding中調用。 – Nyerguds 2017-01-02 09:01:24
- 1. SharpPcap Encoding.UTF8.GetBytes
- 2. C#它們是一樣的:Encoding.UTF8.GetBytes&Convert.FromBase64String?
- 3. 差異( 「UTF-8」)和Encoding.UTF8.GetBytes()的C#
- 4. 爲什麼不是`Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(X))== x`
- 5. Encoding.UTF8.GetString和Encoding.UTF8.GetBytes是不是相互顛倒的原因是什麼?
- 6. Siphash tostring和getBytes()
- 7. Encoding.UTF8.GetBytes(「hag」)中的類層次結構/調用鏈是什麼?
- 8. getBytes和使用String序列化有什麼區別?
- 9. Encoding.UTF8.GetBytes似乎插入一個虛假的字節
- 10. 使用Encoding.UTF8.GetBytes會破壞xls/video文件?
- 11. Swift NSData getBytes顛倒
- 12. 爲什麼叫.getBytes()
- 13. xamarin Android加密GetBytes與C#的方法區別
- 14. System.Text.Encoding.UTF8.GetBytes額外的字節
- 15. 反射GetBytes會,int64類型
- 16. GetBytes函數如何工作?
- 17. Java的String的getBytes nondetermism
- 18. 如何使用getBytes:長度?
- 19. 什麼是NodeJs相當於Java getBytes()
- 20. 散列和GetString/GetBytes會發出
- 21. 擴展方法和GetBytes會實現
- 22. $ @和$ $是否有區別?
- 23. //和m //是否有區別?
- 24. getBytes()方法未定義爲類型TextView
- 25. 內存限制避免在MongoGridFSFile :: getBytes PHP
- 26. 等效於JavaScript的Java的的getBytes的
- 27. Public Overrides Function GetBytes()As Byte()已過時
- 28. Java中的getBytes()等效於C#
- 29. 使用getBytes在Junit中設置附件
- 30. System.Text.Encoding.UTF8.GetBytes引入怪異字符
很好的說明+1 – Aidiakapi 2011-03-18 12:12:58
誠然,文檔,但當前文檔(.NET框架4.5)說,它等同於':檢查了這一點新的UTF8Encoding(true)',它將發出一個BOM。 – Stijn 2014-09-16 07:52:46
此外,@ JonHanna的答案似乎更好地解決了實際問題:「UTF8Encoding.UTF8」與「Encoding.UTF8」是否有所不同。 – Stijn 2014-09-16 07:59:19