2014-11-01 78 views
-2

默认情况下,找出StreamWriter使用没有BOM的UTF-8。我理解使用UTF-8,但为什么没有BOM? http://referencesource.microsoft.com/#mscorlib/system/io/streamwriter.cs为什么StreamWriter使用不含BOM的UTF-8将文本写入文件?

+3

在utf8编码文本中使用BOM [有争议](https://github.com/Joyent公司/节点/问题/ 1918)。字节顺序标记对于对字节顺序敏感的编码是必需的。像utf16和utf32一样,但不是utf8。 Unicode标准也不要求它。 – 2014-11-01 20:12:33

+0

@HansPassant,BOM用于UTF-8在开始时表示文本流以UTF-8编码。对于编码为2个或更多字节的符号很重要。如果没有BOM启发式分析,需要确定文件正在使用什么字符编码。没有这种分析的应用程序可以将没有BOM的文本视为ASCII。 – muradovm 2014-11-01 20:23:10

+0

其中一个原因是,如果使用ASCII(偶然或错误)解码文本,并且字符落入ASCII范围,它将“正常工作”。这与他们希望对读者最大限度宽容的评论是一致的。 – 2014-11-01 20:23:14

回答

2

因为它是记录这样 - StreamWriter

的StreamWriter默认为,除非另有指定使用UTF8Encoding的一个实例。这个UTF8Encoding的实例没有字节顺序标记(BOM),所以它的GetPreamble方法返回一个空字节数组。

+0

我猜这个文档是基于代码实现的。但我的问题是关于决定。不使用UTF-8中的BOM有什么好处? – muradovm 2014-11-01 20:13:59

+0

汉斯已经为您提供了许多链接之一,讨论关于在UTF8流中使用BOM的价值的争论。事实上,尽管他暗示所有C#程序员都认为BOM中应该包含BOM,但可以说并不是所有人都同意这一点。对你的问题最明显的答案是,.NET设计师认为,默认情况下反对包含BOM的观点比支持它的观点更有说服力。 – 2014-11-01 21:35:38

相关问题