ASP .NET Download-Datei mit japanischen Dateinamen
-
07-07-2019 - |
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.
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)