Asp.net 文件下载,中文文件名出现乱码
来源:互联网 发布:量化分析师 知乎 编辑:程序博客网 时间:2024/05/22 15:19
最近在Asp.net项目中遇到一个问题,实现文件下载时,英文文件名的文件下载时,文件名显示正常,但是如果文件名为中文则显示乱码。
在网上google了一下,找到这编文章:解决用ASP.NET下载文件时,文件名为乱码的问题
string encodefileName= System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8); //通过使用HttpUtility.UrlEncode()来对原始文件名进行编码,以解决文件名乱码
Response.AppendHeader("content-disposition", "attachment;filename=" + encodefileName);//附件下载
但是以上这个方案,存在一个问题:就是如果文件名中有空格则空格变成了“+” 号,其他特殊字符尚未测试,有可能还存在其他问题。
再次使用google,终于找到老外的一编文章:Display a non-US-ASCII filename in File Download dialog box
他使用如下code解决问题:
string encodefileName=ToHexString(fileName); //使用自定义的ToHexString()方法,编码原始文件名
Response.AppendHeader("content-disposition", "attachment;filename=" + encodefileName);
/// <summary>
/// Encodes non-US-ASCII characters in a string.
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string ToHexString(string s)
{
char[] chars = s.ToCharArray();
StringBuilder builder = new StringBuilder();
for (int index = 0; index < chars.Length; index++)
{
bool needToEncode = NeedToEncode(chars[index]);
if (needToEncode)
{
string encodedString = ToHexString(chars[index]);
builder.Append(encodedString);
}
else
{
builder.Append(chars[index]);
}
}
return builder.ToString();
}
/// <summary>
/// Determines if the character needs to be encoded.
/// </summary>
/// <param name="chr"></param>
/// <returns></returns>
private static bool NeedToEncode(char chr)
{
string reservedChars = "$-_.+!*'(),@=&";
if (chr > 127)
return true;
if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
return false;
return true;
}
/// <summary>
/// Encodes a non-US-ASCII character.
/// </summary>
/// <param name="chr"></param>
/// <returns></returns>
private static string ToHexString(char chr)
{
UTF8Encoding utf8 = new UTF8Encoding();
byte[] encodedBytes = utf8.GetBytes(chr.ToString());
StringBuilder builder = new StringBuilder();
for (int index = 0; index < encodedBytes.Length; index++)
{
builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
}
return builder.ToString();
}
- asp.net 下载文件 防止中文文件名出现乱码
- Asp.net 文件下载,中文文件名出现乱码
- asp.net文件下载,中文文件名乱码
- asp.net文件下载中文文件名乱码解决
- asp.net下载 中文文件名乱码处理
- 解决C# ASP .NET下载出现中文文件名乱码的问题
- 解决C#ASP.NET下载出现中文文件名乱码的问题
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载的中文文件名乱码处理
- ASP.NET实现下载时的中文文件名乱码处理
- C#下载文件时防止文件名出现中文乱码
- java中String s = new String("abc")创建了几个对象
- 用C#读取GPS数据的基类
- oracle: DATE字段不能只存储"小时分钟秒"
- 英语练习25 It's Mine
- poj 3334
- Asp.net 文件下载,中文文件名出现乱码
- 大学毕业后拉开差距的真正原因 .
- 杂七杂八——Name与x:Name的关系
- error C2065: 'InlineIsEqualGUID' : undeclared identifier
- 中兴面试2
- 学习心得之-----VB.NET 的自定义带窗体的DLL文件
- USB命令(请求)和USB描述符(2)
- 【简报】帮助你免费制作单页面个人网站
- android SDK manager 在线安装adb