Frage

Ich bin derzeit mit Visual Studio 2008 für meine ASP .NET-Anwendung. Ich versuche, mit dem Server eine Excel-Datei über das Response-Objekt. Das Problem ist, ich kann nicht den Titel der Datei auf Japanisch zu setzen scheinen. Wenn ich es auf dem japanischen Dateinamen gesetzt, wird es als Müll Zeichen zurückgegeben. Ich bin einen japanischen IE-Browser in einem japanischen WinXP verwenden.

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

oder

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

Ich habe bereits versucht, die Codierung zu ändern, um Shift-JIS

Response.Charset = "Shift_JIS";

oder

Response.Charset = "sjis";

Irgendwelche Ideen? Btw, ich hatte das gleiche Problem mit Visual Studio 2005 zu.

War es hilfreich?

Lösung

Ich bin kein Experte, aber ASP haben Sie die Dateinamen versuchten Umkodierung UrlEncode mit?

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

Andere Tipps

Response.Charset betrifft nur den Körper der HTTP-Anforderung. Nach der HTTP-Spezifikation sind die Header implizit codiert als ISO-8859-1 -. Zeichen außerhalb dieser Codierung MIME-codierte sein müssen

Das ist nur logisch - schließlich stellt der Körper Codierung von Response.Charset selbst in einem Header angegeben wird

.

Ich habe es funktioniert, schließlich ...:)

Die Verwendung von System.Web.HttpUtility.UrlPathEncode löst das Müllproblem, aber wenn Sie die Datei öffnen, zeigt es Unicode-uncodiert Namen im Dateinamen anstelle der tatsächlichen japanischen Schriftzeichen. (Na ja, das ist das Problem in IE7 und IE6 ist, UrlPathEncode mit IE8 funktioniert gut. )

Also, statt System.Web.HttpUtility.UrlPathEncode verwenden Sie sollten die filname mit der Codierung für die Antwort-Header verwendet dekodieren.

In .NET standardmäßig die Codierung der Antwort-Header ist utf-8, ändern Sie es in iso-8859-1. Ändern Sie die web.config für die gleiche, wie unten gezeigt,

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

Und Code wäre,

    //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()

Nun, noch eine wichtige Sache, ich habe verschwendet viel Zeit, weil es ist das funktioniert nicht auf ASP.NET Development Server , dh der Server verwenden Sie / debug die Bahn zu testen Apps auf dem lokalen Rechner. So stellen Sie die Lösung auf der IIS und Test von dort. Es funktioniert völlig in Ordnung, auf IIS. (Und IIS ist das Schicksal jedes ASP.NET app;) so spielt es keine Rolle, ob es auf ASP.NET Development Server funktioniert oder nicht)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top