ï »¿personaje (BOM UTF-8) en medio de respuesta ASP.NET debido a HttpResponse.TransmitFile ()

StackOverflow https://stackoverflow.com/questions/1376602

Pregunta

He visto este post: ï »¿caracteres anexado al comienzo de cada archivo .

En ese caso, el autor estaba leyendo manualmente el archivo de origen y escribir el contenido. En mi caso, estoy haciendo abstracción a la basura a través de 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");
}

Los archivos .js están efectivamente codificados en UTF-8. Esto significa que el ï »¿BOM aparece incorrectamente al principio de cada uno, pero el primer archivo.

Las cosas buenas de TransmitFile () son que (a) se abstrae todo el proceso de lectura + escritura, y (b) que es optimizado para no leer los archivos en la memoria primero - que es de gran importancia cuando los archivos son grandes y / o usted tiene muchas solicitudes simultáneas. Pero la otra cara es que no soy capaz de volver a codificar en UTF-8 sin la lista de materiales. (Supongo que esto es un ejemplo de una abstracción con fugas.)

¿Hay alguna manera elegante de resolver este problema? Gracias!

¿Fue útil?

Solución

Cerrando el ciclo en esto: TransmitFile() transmite los bytes sin formato del archivo, por lo que si los archivos están codificados en UTF-8 con una lista de materiales y se transmiten varios archivos, podrás transmitir múltiples listas de materiales

.

Si usted lee los archivos usted mismo en la memoria como cadenas y transmitir esas cadenas, no obtendrá este problema. Terminamos yendo con simplemente codificar los archivos como UTF-8 sin la lista de materiales o como ANSI.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top