今天我看到一个代码,其中使用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