2009-09-04 9 views
0

J'ai vu cet article:  characters appended to the begining of each file.Caractère ï »¿(BOM UTF-8) au milieu de la réponse ASP.NET en raison de HttpResponse.TransmitFile()

Dans ce cas, l'auteur lisait manuellement le fichier source et écrivait le contenu. Dans mon cas, je suis abstraite par 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"); 
} 

Les fichiers .js sont en effet encodées en UTF-8. Cela signifie que la nomenclature n'apparaît pas correctement au début de chaque fichier sauf le premier. Les bonnes choses à propos de TransmitFile() sont que (a) il extrait tout le processus de lecture et d'écriture, et (b) il est optimisé pour ne pas lire les fichiers en mémoire - ce qui est extrêmement important quand les fichiers sont grand et/ou vous avez beaucoup de demandes simultanées. Mais le revers de la médaille est que je ne suis pas capable de le ré-encoder en UTF-8 sans la nomenclature. (Je suppose que ceci est un exemple d'abstraction qui fuit.)

Existe-t-il une manière élégante de résoudre ce problème? Merci!

+0

Est-ce réellement un problème en pratique? La nomenclature est un caractère d'espace (espace non brisé de largeur nulle, point de code U + FFFE). L'interprète JS étouffe-t-il? –

+0

Plus important encore, IE7 et ci-dessous s'étrangler dessus (caractère non valide). Moins important mais toujours agaçant, JSLint s'étouffe. –

+0

Je ne pense pas que TransmitFile fait des optimisations magiques pour la transmission, rien que vous ne pourriez recréer avec les pompes de lecture/écriture de flux – meandmycode

Répondre

1

Fermeture de la boucle: TransmitFile() transmet les octets bruts du fichier, donc si les fichiers sont encodés en UTF-8 avec une nomenclature et que vous transmettez plusieurs fichiers, vous transmettez plusieurs nomenclatures.

Si vous lisez vous-même les fichiers en tant que chaînes et que vous transmettez ces chaînes, vous n'obtiendrez pas ce problème. Nous avons fini par simplement encoder les fichiers en UTF-8 sans la BOM ou en ANSI.

Questions connexes