ASP .NET Baixar Arquivo com japonês File Name
-
07-07-2019 - |
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.
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)