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

时间:2009-09-04 00:06:03

标签: asp.net encoding utf-8 byte-order-mark

我看过这篇文章: characters appended to the begining of each file

在这种情况下,作者手动读取源文件并编写内容。在我的情况下,我通过HttpRequest抽象它。TransmitFile():

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");
}

.js文件确实以UTF-8编码。这意味着BOM错误地出现在每个文件的开头但是第一个文件。

关于TransmitFile()的好处是(a)它抽象了整个读取和写入过程,(b)它被优化为不首先将文件读入内存 - 这在文件很大时非常重要和/或你有很多并发请求。但另一方面是我无法在没有BOM的情况下将其重新编码为UTF-8。 (我想这是一个漏洞抽象的例子。)

有没有优雅的方法来解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

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

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