Domanda

Attualmente sto usando Visual Studio 2008 per la mia applicazione ASP .NET. Sto cercando di server un file Excel tramite l'oggetto Response. Il problema è che non riesco a impostare il titolo del file su giapponese. Se lo imposto sul nome del file giapponese, viene restituito come carattere immondizia. Sto usando un browser IE giapponese in un WinXP giapponese.

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

o

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

Ho già provato a cambiare la codifica in Shift-JIS

Response.Charset = "Shift_JIS";

o

Response.Charset = "sjis";

Qualche idea? A proposito, ho avuto lo stesso problema anche con Visual Studio 2005.

È stato utile?

Soluzione

Non sono un esperto di ASP ma hai provato a ricodificare il nome file usando UrlEncode?

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

Altri suggerimenti

Response.Charset riguarda solo il corpo della richiesta HTTP. Secondo le specifiche HTTP , le intestazioni sono implicitamente codificato come ISO-8859-1 - i caratteri all'esterno di tale codifica devono essere codificato MIME .

Questo è solo logico - dopo tutto, la codifica del corpo impostata da Response.Charset è essa stessa specificata in un'intestazione.

L'ho fatto funzionare, finalmente ... :)

L'uso di System.Web.HttpUtility.UrlPathEncode risolve il problema dell'immondizia ma quando si apre il file, mostra nomi non codificati unicode nel nome del file invece di caratteri giapponesi reali. il problema in IE7 e IE6, UrlPathEncode funziona bene con IE8.)

Quindi, invece di usare System.Web.HttpUtility.UrlPathEncode dovresti decodificare il nome del file usando la codifica usata per l'intestazione Response.

In .NET, per impostazione predefinita la codifica dell'intestazione Response è utf-8, cambiarla in iso-8859-1. Modificare web.config per lo stesso, come mostrato di seguito,

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

E il codice sarebbe,

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

Ora, un'altra cosa importante, ho perso molto tempo a causa di ciò, è questo non funziona su ASP.NET Development Server cioè il server che usi per testare / eseguire il debug del web app sul tuo computer locale. Quindi, distribuire la soluzione su IIS e testare da lì. Funziona perfettamente su IIS. (e IIS è il destino di ogni app ASP.NET;) quindi non importa se funziona su ASP.NET Development Server o meno)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top