C# 用c utf-8编码文本,无BOM

C# 用c utf-8编码文本,无BOM,c#,encoding,utf-8,byte-order-mark,C#,Encoding,Utf 8,Byte Order Mark,我尝试过,但没有起作用,我想编码没有BOM,但选择false仍然编码utf-8和BOM 这是我的密码 System.Text.Encoding outputEnc = new System.Text.UTF8Encoding(false); return File(outputEnc.GetBytes(" <?xml version=\"1.0\" encoding=\"utf-8\"?>" + xmlString), "application/xm

我尝试过,但没有起作用,我想编码没有BOM,但选择false仍然编码utf-8和BOM

这是我的密码

System.Text.Encoding outputEnc = new System.Text.UTF8Encoding(false);
                return File(outputEnc.GetBytes(" <?xml version=\"1.0\" encoding=\"utf-8\"?>" + xmlString), "application/xml", id);

这个问题已经有两年多的历史了,但我已经找到了答案。您在输出中看到BOM表的原因是因为您的输入中有BOM表。在XML声明的开头看起来是空格的实际上是一个BOM表,后面跟着一个空格。要证明这一点,请选择文本 @德斯坦利:这个问题似乎不是重复的。另一个问题中被接受的答案指出必须将false传递给UTF8Encoding构造函数,这正是本问题中所做的。因此,另一个问题没有帮助。被提名重新打开。@O.R.Mapper同意-我在代码示例中没有发现这一点。你如何检查它是否用BOM编码?@DStanley:澄清一下:由于这个错误应该有效,我怀疑这里还有其他原因;也许OP运行的是他们应用程序的旧版本。但是,只要这一点没有得到证实,这个问题就不同了。我用记事本++检查了一下,很抱歉,但这种咆哮在实践中是可怕的建议,尤其是在但不限于Windows上。它进行了优化以避免这种罕见的情况,但代价是更常见的情况,例如。重新分析整个文本通常是不切实际的,而且我还没有发现许多文件系统能够可靠地、肯定地将编码存储在文件数据的外部™ 或者其他显示UTF-8字符被错放为拉丁语-1的序列,我不认为哦,他们应该使用BOM来避免错放。我想,哦,有一个程序员没有通过Unicode 101。通过谷歌的快速搜索,我找到了UTF-8,90%的网站都在使用UTF-8。我不知道他们的调查方法,但在网络上,解析为UTF-8应该始终是默认的。此外,从个人经验来看,我倾向于发现BOM错误更难追踪,因为它们是不可见的。错误编码的UTF-8会立即突出,因此该错误往往会被注意到并迅速修复。因此,尽管我同意您的观点,即BOM错误比错误编码错误更为罕见,但我仍然认为避免BOM是最好的默认行为,因为您将避免不可见的、难以跟踪的错误,而倾向于立即发现和修复的可见错误。虽然这是理所当然的,但有时这些错误存在于其他人的代码中,您无法修复。基于数据统计分析或快速假设的解析在大规模上是行不通的。而且速度慢得多,价格也贵得多。为什么要责怪程序员从Word粘贴数据,或者责怪平台、框架、库和不同年龄和质量的工具,而你也可以责怪他们没有正确处理BOM签名。为什么要针对罕见的用户影响较小的情况进行优化?特别是当涉及Windows的任何东西在没有BOM表的情况下无法可靠地处理文本时,请看老布什隐藏了事实错误。
U+0022 : QUOTATION MARK
U+FEFF : ZERO WIDTH NO-BREAK SPACE [ZWNBSP] (alias BYTE ORDER MARK [BOM])
U+0020 : SPACE [SP]
U+003C : LESS-THAN SIGN