ï »¿caratteri (UTF-8 BOM) a mezzo di risposta ASP.NET causa HttpResponse.TransmitFile ()
-
21-09-2019 - |
Domanda
Ho visto questo post: ï »¿caratteri allegata al l'inizio di ogni file .
In questo caso, l'autore stava leggendo manualmente il file di origine e la scrittura dei contenuti. Nel mio caso, sto astraendo via via 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");
}
I file .js sono infatti codificati in UTF-8. Questo significa che il ï »¿BOM appare in modo non corretto, all'inizio di ogni ma il primo file.
Le cose belle di TransmitFile () sono che (a) si astrae l'intero processo di lettura + scrittura, e (b) è ottimizzato per non leggere i file in memoria prima - che è estremamente importante quando i file sono di grandi dimensioni e / o si dispone di molte richieste simultanee. Ma il rovescio della medaglia è che io non sono in grado di ricodificare in UTF-8 senza BOM. (Credo che questo sia un esempio di astrazione che perde.)
C'è un modo elegante per risolvere questo problema? Grazie!
Soluzione
La chiusura del ciclo su questo: TransmitFile()
trasmette i byte grezzi del file, quindi se i file sono codificati in UTF-8 con una distinta base e si trasmettono più file, potrai trasmettere più distinte base
Se si leggono i file da soli nella memoria come stringhe e trasmettere quelle corde, non sarà possibile ottenere questo problema. Abbiamo finito con semplice codifica dei file come UTF-8 senza BOM o come ANSI.