0

私はこの投稿を見ました:各ファイルの先頭に追加された文字

その場合、作成者は手動でソースファイルを読み取り、内容を書き込んでいました。私の場合、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に再エンコードできません。(これはリークのある抽象化の例だと思います。)

この問題を解決するためのエレガントな方法はありますか?ありがとう!

4

1 に答える 1

2

これでループを閉じる:TransmitFile()ファイルの生のバイトを送信するため、ファイルがBOMを使用してUTF-8でエンコードされ、複数のファイルを送信する場合は、複数のBOMを送信します。

ファイルを自分で文字列としてメモリに読み込み、それらの文字列を送信する場合、この問題は発生しません。最終的には、ファイルをBOMなしのUTF-8またはANSIとして単純にエンコードすることになりました。

于 2011-03-20T06:48:58.427 に答える