Question

J'utilise actuellement Visual Studio 2008 pour mon application ASP .NET. J'essaie de serveur un fichier Excel via l'objet Response. Le problème est que je n'arrive pas à définir le titre du fichier en japonais. Si je le mets au nom de fichier japonais, il sera retourné avec un caractère de mémoire. J'utilise un navigateur IE japonais dans une WinXP japonaise.

Response.AppendHeader("Content-Type", "application/vnd.ms-excel");
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", "日本語.xls"));

OU

Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", Server.HtmlEncode("日本語.xls")));

J'ai déjà essayé de changer le codage en Shift-JIS

Response.Charset = "Shift_JIS";

ou

Response.Charset = "sjis";

Des idées? Au fait, j'ai eu le même problème avec Visual Studio 2005.

Était-ce utile?

La solution

Je ne suis pas un expert ASP, mais avez-vous essayé de recoder le nom du fichier en utilisant UrlEncode?

Response.AddHeader("Content-Disposition",
    System.Web.HttpUtility.UrlEncode(String.Format("attachment; filename=\"{0}\"", "日本語.xls")));

Autres conseils

Response.Charset concerne uniquement le corps de la requête HTTP. Selon la spécification HTTP , les en-têtes sont implicitement codé en tant que ISO-8859-1 - les caractères extérieurs à ce codage doivent être codés en MIME . / p>

Ceci n’est que logique. Après tout, le codage du corps défini par Response.Charset est lui-même spécifié dans un en-tête.

Je l'ai fait fonctionner, enfin ...:

L'utilisation de System.Web.HttpUtility.UrlPathEncode résout le problème de mémoire, mais lorsque vous ouvrez le fichier, il affiche les noms non codés en Unicode dans le nom du fichier, au lieu des caractères japonais réels. le problème dans IE7 et IE6, UrlPathEncode fonctionne bien avec IE8.)

Ainsi, au lieu d'utiliser System.Web.HttpUtility.UrlPathEncode , vous devez décoder le nom du fichier en utilisant le codage utilisé pour l'en-tête de réponse.

Dans .NET, le codage de l'en-tête de réponse est par défaut utf-8, remplacez-le par iso-8859-1. Modifiez le fichier web.config de la même manière, comme indiqué ci-dessous,

<globalization responseHeaderEncoding="iso-8859-1" .../>

Et le code serait,

    //apply Response header's encoding i.e. iso-8859-1 to the filename.
    Dim fileName as String = "在庫あり全商品を24時間以内に出荷.doc" 
    Dim enc As Encoding = Encoding.GetEncoding("shift_jis") 
    Dim dec As Encoding = Encoding.GetEncoding("iso-8859-1")
    fileName = dec.GetString(enc.GetBytes(fileName))

    //Show Download Dialog box and Writting it on Client Side.
    Response.ClearHeaders() 
    Response.ContentType = corspBean.ContentType 
    Response.AppendHeader("content-disposition", "attachment; filename=""" + fileName + """") 
    Response.BinaryWrite(bytes) 
    Response.End()

Maintenant, une autre chose importante, j’ai perdu beaucoup de temps à cause de cela, est cela ne fonctionne pas sur le serveur de développement ASP.NET , c’est-à-dire le serveur que vous utilisez pour tester / déboguer le Web. applications sur votre ordinateur local. Alors, déployez la solution sur IIS et testez à partir de là. Cela fonctionne parfaitement bien sur IIS. (et IIS est le destin de toutes les applications ASP.NET;). Par conséquent, que cela fonctionne ou non sur ASP.NET Development Server.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top