;由于HttpResponse.TransmitFile()而导致ASP.NET响应中间的字符(UTF-8 BOM)

;由于HttpResponse.TransmitFile()而导致ASP.NET响应中间的字符(UTF-8 BOM),asp.net,encoding,utf-8,byte-order-mark,Asp.net,Encoding,Utf 8,Byte Order Mark,我看过这个帖子: 在这种情况下,作者手动读取源文件并写入内容。在我的例子中,我通过HttpRequest将其抽象出来 js文件确实是用UTF-8编码的。这意味着除了第一个文件外,BOM表错误地显示在每个文件的开头 TransmitFile()的优点在于:(a)它将整个读写过程抽象出来,(b)它优化为不首先将文件读入内存——这在文件很大和/或有许多并发请求时非常重要。但另一方面,如果没有BOM,我无法将其重新编码为UTF-8。(我想这是一个泄漏抽象的例子。) 有什么优雅的方法可以解决这个问题吗?谢

我看过这个帖子:

在这种情况下,作者手动读取源文件并写入内容。在我的例子中,我通过HttpRequest将其抽象出来

js文件确实是用UTF-8编码的。这意味着除了第一个文件外,BOM表错误地显示在每个文件的开头

TransmitFile()的优点在于:(a)它将整个读写过程抽象出来,(b)它优化为不首先将文件读入内存——这在文件很大和/或有许多并发请求时非常重要。但另一方面,如果没有BOM,我无法将其重新编码为UTF-8。(我想这是一个泄漏抽象的例子。)


有什么优雅的方法可以解决这个问题吗?谢谢

关闭此循环:
TransmitFile()
传输文件的原始字节,因此,如果文件用带有BOM的UTF-8编码,并且您传输多个文件,那么您将传输多个BOM


如果您自己将文件作为字符串读入内存并传输这些字符串,则不会出现此问题。我们最终只将文件编码为UTF-8而不使用BOM或ANSI。

这实际上是一个问题吗?BOM表是一个空白字符(零宽度不间断空格,代码点U+FFFE)。JS解释器阻塞了吗?最重要的是,IE7及以下版本阻塞了它(无效字符)。不太重要但仍然令人讨厌的是,JSLint被它扼杀了。我不认为TransmitFile实际上对传输做了任何神奇的优化,没有任何东西是您不能用流读/写重新创建的pumps@meandmycode很抱歉回复太晚,但是如果你读/写原始字节,你是对的。如果将文本内容读/写为字符串,则不会看到此问题。
public void ProcessRequest(HttpContext context)
{
    HttpRequest req = context.Request;
    HttpResponse resp = context.Response;

    resp.ContentType = "application/javascript";

    resp.TransmitFile("foo.js");
    resp.TransmitFile("bar.js");
    resp.TransmitFile("baz.js");
}