0

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

在那种情况下,作者是手动读取源文件并写入内容。就我而言,我通过 HttpRequest 将其抽象出来。传输文件():

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。(我想这是一个泄漏抽象的例子。)

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

4

1 回答 1

2

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

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

于 2011-03-20T06:48:58.427 回答