关注!!!关注!!!

hunter_32 2006-12-26 04:59:59
大家看看怎么样才能正确将WebResponse取得的文件编码


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Net;
using System.Text;

namespace getfile
{
public class WebForm1 : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
Response.Clear();

string url = Request.QueryString["url"];
if (null == url || url.Trim().Length == 0)
{
Response.End();
return;
}

try
{
WebRequest request = WebRequest.Create(url);
request.Method = Request.RequestType;
request.ContentType = Request.ContentType;

int reads = 0;
byte[] buffer = new byte[512];

if (Request.RequestType.Equals("POST"))
{
if (null != Request.Form)
{
using (Stream s = request.GetRequestStream())
{
while ((reads = Request.InputStream.Read(buffer, 0, buffer.Length)) > 0)
{
s.Write(buffer, 0, reads);
}
s.Flush();
}
}
}

WebResponse response = request.GetResponse();
Response.ContentType = response.ContentType;
using (Stream s = response.GetResponseStream())
{
while ((reads = s.Read(buffer, 0, buffer.Length)) > 0)
{
//Response.OutputStream.Write(buffer, 0, reads);
writeFile(buffer,Server.MapPath(".") + @"\my.xls");
}
}
response.Close();
}
catch(Exception ex)
{
ex.ToString();
}

Response.End();
base.OnLoad (e);
}


/// <summary>
/// 写文件
/// </summary>
/// <param name="mybt">需要写入的byte字节流</param>
/// <param name="filename">要写入的文件的名称及其绝对路径</param>
/// <returns>返回bool值是否成功</returns>
public bool writeFile(byte[] mybt,string filename)
{
try
{
StreamWriter write = new StreamWriter(filename,true);
System.Text.Encoding myen = Encoding.GetEncoding("GB2312");
//byte[] wbyt = Encoding.Convert(Encoding.Default,Encoding.GetEncoding("GB2312"),mybt,0,mybt.Length);
string mystr = myen.GetString(mybt,0,wbyt.Length);

write.Write(mystr);
write.Close();
return true;
}
catch(Exception ex)
{
ex.ToString();
return false;
}
}

private void Page_Load(object sender, System.EventArgs e)
{
}


#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
...全文
138 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaozhao110 2006-12-27
  • 打赏
  • 举报
回复
mark
www_datasky_cn 2006-12-27
  • 打赏
  • 举报
回复
将编码格式调整为 UTF-8
POPO_POPO 2006-12-27
  • 打赏
  • 举报
回复
学习
CMIC 2006-12-26
  • 打赏
  • 举报
回复
string url = Request.QueryString["url"];用HttpWebResponse.ContentEncoding就行吧,在server断设置ContentEncoding,客户断读取。
azurebz 2006-12-26
  • 打赏
  • 举报
回复
帮顶,学习
cpp2017 2006-12-26
  • 打赏
  • 举报
回复
网上找了很久,没有找到合适的资料,老外大多用英文的,出没找一相关资料 .就像csdn有的贴子的xml是gb2312的,有的是utf-8的,不过csdn里面的contenttype里面有charset.可解析出来. 而有些就没有.
cat_hsfz 2006-12-26
  • 打赏
  • 举报
回复
以下是我读取txt自适应Encoding的代码:
using (StreamReader reader = new StreamReader(path, Encoding.Default))
{
String line;
while ((line = reader.ReadLine()) != null)
{
this.FileTextBox.InnerHtml += Server.HtmlEncode(line) + "\r\n";
}
this.FileEncoding = reader.CurrentEncoding;
}
这段代码不是把txt的内容输出到客户端,而是显示到TextBox,所以每次reader.ReadLine的结果都追加到TextBox中。在读完之后,通过reader.CurrentEncoding来获取这个文件的自适应编码。

注意这是“自适应”的,但不是100%准确识别的。就如你用记事本随手打开一个txt那样,大多数情况都能正确识别编码,但也有少数不能正确识别的,例如广为人知的“联通”两个字保存为GB2312后,再打开时就会被判别为UTF-8,然后显示乱码。

这是因为文件本身并不记录自己是什么编码的,所谓的“自适应”就是读文件时根据字节规律来识别这个文件是什么编码的。
tianbaobao 2006-12-26
  • 打赏
  • 举报
回复
mark,學習一下 ~
hegang888888888 2006-12-26
  • 打赏
  • 举报
回复
up
hunter_32 2006-12-26
  • 打赏
  • 举报
回复
保存文件之后格式就不正确了
hunter_32 2006-12-26
  • 打赏
  • 举报
回复
大家研究研究吧。帮帮忙了!
hanchi8008 2006-12-26
  • 打赏
  • 举报
回复
4星现在怎么这么多啊!我也来凑个热闹。
顶一把!
貓哥是個傳說 2006-12-26
  • 打赏
  • 举报
回复
mark,學習一下 ~
hunter_32 2006-12-26
  • 打赏
  • 举报
回复
如果解决可以再给200分!

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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