Pergunta

Atualmente, estou usando o Visual Studio 2008 para a minha aplicação ASP .NET. Eu estou tentando servidor um arquivo do Excel através do objeto Response. O problema é que eu não consigo definir o título do arquivo para o japonês. Se eu defini-lo como nome do arquivo japonesa, ele é retornado como personagem de lixo. Eu estou usando um navegador japonês IE em uma WinXP japonês.

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

Eu já tentei mudar a codificação para Shift-JIS

Response.Charset = "Shift_JIS";

ou

Response.Charset = "sjis";

Todas as idéias? Btw, eu tive o mesmo problema com o Visual Studio 2005 também.

Foi útil?

Solução

Eu não sou um especialista ASP, mas você já tentou recodificar o nome do arquivo usando UrlEncode?

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

Outras dicas

Response.Charset diz apenas respeito ao corpo da solicitação HTTP. De acordo com a o HTTP especificação , os cabeçalhos são implicitamente codificado como ISO-8859-1 -. caracteres fora que a codificação tem que ser MIME-codificado

Este é apenas lógico -. Afinal de contas, o conjunto de codificação corpo por Response.Charset é em si especificado em um cabeçalho

Eu tenho que trabalhar, finalmente ...:)

O uso de System.Web.HttpUtility.UrlPathEncode resolve o problema do lixo, mas quando você abre o arquivo, ele mostra nomes Unicode não codificada no nome do arquivo em vez de caracteres japoneses reais. (Bem, esse é o problema no IE7 e IE6, UrlPathEncode fina trabalha com IE8. )

Assim, em vez de usar System.Web.HttpUtility.UrlPathEncode você deve decodificar o filname usando a codificação usada para o cabeçalho de resposta.

Na NET, por padrão a codificação do cabeçalho de resposta é utf-8, alterá-lo para iso-8859-1. Modificar o web.config para o mesmo, como mostrado abaixo,

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

E código seria,

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

monte Agora, uma coisa mais importante, que eu perdi tempo por causa disso, é isso não funciona no ASP.NET Development Server ou seja, o servidor que você usa para teste / depurar o web aplicações em sua máquina local. Então, implantar a solução no IIS e teste de lá. Ele funciona perfeitamente bem no IIS. (E IIS é o destino de todas as aplicações ASP.NET;), por isso não importa se ele funciona em ASP.NET Development Server ou não)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top