Pregunta

Actualmente estoy usando Visual Studio 2008 para mi aplicación ASP .NET. Estoy tratando de servidor de un archivo de Excel a través del objeto de respuesta. El problema es que parece que no puedo establecer el título del archivo en japonés. Si lo configuro en nombre de archivo japonés, se devuelve como carácter basura. Estoy usando un navegador IE japonés en un WinXP japonés.

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")));

Ya intenté cambiar la codificación a Shift-JIS

Response.Charset = "Shift_JIS";

o

Response.Charset = "sjis";

¿Alguna idea? Por cierto, tuve el mismo problema con Visual Studio 2005 también.

¿Fue útil?

Solución

No soy un experto en ASP, pero ¿ha intentado recodificar el nombre de archivo usando UrlEncode?

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

Otros consejos

Response.Charset solo se refiere al cuerpo de la solicitud HTTP. Según la especificación HTTP , los encabezados están implícitamente codificado como ISO-8859-1: los caracteres que no estén codificados deben ser MIME-encoded .

Esto es lógico: después de todo, la codificación del cuerpo establecida por Response.Charset se especifica en un encabezado.

Lo tengo funcionando, finalmente ... :)

El uso de System.Web.HttpUtility.UrlPathEncode resuelve el problema de la basura, pero cuando abre el archivo, muestra nombres sin codificar unicode en el nombre de archivo en lugar de caracteres japoneses reales. (Bueno, esto es el problema en IE7 e IE6, UrlPathEncode funciona bien con IE8.)

Entonces, en lugar de usar System.Web.HttpUtility.UrlPathEncode , debe decodificar el nombre de archivo usando la codificación utilizada para el encabezado de Respuesta.

En .NET, de forma predeterminada, la codificación del encabezado Response es utf-8, cámbiela a iso-8859-1. Modifique web.config para el mismo, como se muestra a continuación,

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

Y el código sería,

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

Ahora, una cosa más importante, he perdido mucho tiempo por eso, es esto no funciona en el servidor de desarrollo ASP.NET es decir, el servidor que usa para probar / depurar la web aplicaciones en su máquina local. Entonces, implemente la solución en el IIS y pruebe desde allí. Funciona perfectamente bien en IIS. (e IIS es el destino de todas las aplicaciones ASP.NET;) por lo que no importa si funciona en ASP.NET Development Server o no)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top