又是乱码,又是乱码,好烦啊,大侠们,请指教..........

bustersword 2011-08-15 12:30:52
 public bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
{
try
{
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = new BinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges", "bytes");
_Response.Buffer = false;
long fileLength = myFile.Length;
long startBytes = 0;
int pack = 10240; //10K bytes
//int sleep = 200; //每秒5次 即5*10K bytes每秒
int sleep = (int)(1000 * pack / _speed) + 1;
//int sleep =(int)System.Math.Floor(1000 * pack / _speed) + 1;
if (_Request.Headers["Range"] != null)
{
_Response.StatusCode = 206;
string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
startBytes = Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}
_Response.AddHeader("Connection", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int)((fileLength - startBytes) / pack) + 1;
//int maxCount =(int)System.Math.Floor((fileLength - startBytes) / pack) + 1;
for (int i = 0; i < maxCount; i++)
{
if (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));

}
else
{
i = maxCount;
}
}
}
catch
{
return false;
}
finally
{
br.Close();
myFile.Close();
_Response.Close();
}
}
catch (Exception ex)
{
return false;
}
return true;
}

文件标题是日文的就乱码,我疯掉了,啥编码,都试了下。郁闷
...全文
196 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
bustersword 2011-09-30
  • 打赏
  • 举报
回复
/// <summary>
/// 为字符串中的非英文字符编码
/// </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>
///指定 一个字符是否应该被编码
/// </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>
/// 为非英文字符串编码
/// </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();
}


来结贴了
一休宗纯 2011-08-15
  • 打赏
  • 举报
回复
你指的文件标题是什么?是文件名吗?
你读取的是什么文件?最好给一个sample
diandian82 2011-08-15
  • 打赏
  • 举报
回复
uup
zjq8888882009 2011-08-15
  • 打赏
  • 举报
回复
mark
bustersword 2011-08-15
  • 打赏
  • 举报
回复
没有呢- -.........要黄了么
一休宗纯 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bustersword 的回复:]

我感觉,路径包含日文是没有问题的
内容包含日文也是没有问题的
问题只是出现在下载的时候文件名乱码
我用火狐5.0下载没问题,IE7就不行
[/Quote]
晕呼中,你现在搞定了没?
bustersword 2011-08-15
  • 打赏
  • 举报
回复
我感觉,路径包含日文是没有问题的
内容包含日文也是没有问题的
问题只是出现在下载的时候文件名乱码
我用火狐5.0下载没问题,IE7就不行
一休宗纯 2011-08-15
  • 打赏
  • 举报
回复
你的文件路径包含日文,你的文件内容又不见得包含日文。

你的意思没有表达清楚。太混乱了!

按道理说,如果读取文件正确,你的文件名编码形式是不是影响到读取的文件内容的
bustersword 2011-08-15
  • 打赏
  • 举报
回复
IE里是UTF-8的....,我选择“自动选择”
还是不行
  • 打赏
  • 举报
回复
文件标题是日文的,那么你的浏览器上默认的编码方式是“自动选择”么?
bustersword 2011-08-15
  • 打赏
  • 举报
回复
我去掉了对文件名的编码,就OK了?
我擦,我画蛇添足了?
不过有些浏览器真变成乱码了。。。。
DB螳夂セゥ譖ク.xls
bustersword 2011-08-15
  • 打赏
  • 举报
回复
如果不存在日文,只是英文名,OK
一休宗纯 2011-08-15
  • 打赏
  • 举报
回复
如果手工将这个日文的路径名改掉,就没有问题吗?
bustersword 2011-08-15
  • 打赏
  • 举报
回复
图片挂了,是文件名乱码
bustersword 2011-08-15
  • 打赏
  • 举报
回复
F:\cloudEntryService\04-コーディング\DataSource\CES\CES.WebUI/Entry/DeliveryRule/zhao/CES20110815120926_zhaomin2/CES改善点.xls
这是路径,

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧