怎么处理iso-8859-1 编码

haa17 2011-09-02 10:59:43

public static string GetHtmlAutoEncoding()
{
HttpWebRequest req = null;
HttpWebResponse resp = null;
Stream stream = null;
StreamReader read = null;
try
{

string url = "http://roll.sohu.com/20110827/n317536952.shtml";
req = (HttpWebRequest)HttpWebRequest.Create(sUrl);
req.UserAgent = "Mozilla/5.0 (Windows NT 5.2; rv:6.0) Gecko/20100101 Firefox/6.0";
req.Accept = "*/*";
req.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
req.ContentType = "text/xml";
req.Referer = url;

resp = (HttpWebResponse)req.GetResponse();
Encoding enc = Encoding.GetEncoding(resp.CharacterSet);

string sHTML = string.Empty;
stream = resp.GetResponseStream();
string sChartSet = "";
read = new StreamReader(stream, enc);

sHTML = read.ReadToEnd();
Match charSetMatch = Regex.Match(sHTML, @"charset=(?<code>[\s\S]+?)", RegexOptions.IgnoreCase);
sChartSet = charSetMatch.Groups["code"].Value;
//if it's not utf-8,we should redecode the html.
if (!string.IsNullOrEmpty(sChartSet.Trim()))
sHTML = Encoding.GetEncoding(sChartSet).GetString(enc.GetBytes(sHTML));
if (resp.CharacterSet != "iso-8859-1")
{
Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
byte[] byteArray = encoding.GetBytes(sHTML);

string aaXX = System.Text.Encoding.GetEncoding("GBK").GetString(byteArray);
}
return sHTML;
}
catch
{
return "";
}
finally
{
if (resp != null)
{
resp.Close();
}
if (stream != null)
{
stream.Close();
}
if (read != null)
{
read.Close();
}
}
}


上面代码是获取页面源码,但是很多页面resp.CharacterSet 的编码格式是iso-8859-1,尝试了几种方法,都不行正确转码,请指点。

Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
byte[] byteArray = encoding.GetBytes(sHTML);

string aaXX = System.Text.Encoding.GetEncoding("GBK").GetString(byteArray);
此种方法出来还是乱码。
...全文
595 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LMAOhuaNL 2011-09-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vrhero 的回复:]

仔细看看还真是你的request有问题...

加上 Accept-Charset:GB2312,utf-8; Accept-Language 改成 Accept-Language:zh-cn,zh;
[/Quote]
zh-cn表示中文了
haa17 2011-09-02
  • 打赏
  • 举报
回复
加上了,utf-8 gb2312,gbk 都试了,还是乱码。[Quote=引用 4 楼 vrhero 的回复:]

仔细看看还真是你的request有问题...

加上 Accept-Charset:GB2312,utf-8; Accept-Language 改成 Accept-Language:zh-cn,zh;
[/Quote]
vrhero 2011-09-02
  • 打赏
  • 举报
回复
仔细看看还真是你的request有问题...

加上 Accept-Charset:GB2312,utf-8; Accept-Language 改成 Accept-Language:zh-cn,zh;
haa17 2011-09-02
  • 打赏
  • 举报
回复
关键还是sohu的 是我获取错了吗?[Quote=引用 2 楼 vrhero 的回复:]

iso-8859-1是西欧拉丁语,单字节编码,根本就不支持中文...如果有内容有中文,是那些垃圾网站的问题,因为它们没有为多字节编码页面设置charset,很多浏览器就默认iso-8859-1了...

直接用ANSI或UTF-8读,不能用ISO-8859-1解码...至于它正确的编码是什么,你就挨个试吧...郁闷的话就骂它们的程序员...
[/Quote]
vrhero 2011-09-02
  • 打赏
  • 举报
回复
iso-8859-1是西欧拉丁语,单字节编码,根本就不支持中文...如果有内容有中文,是那些垃圾网站的问题,因为它们没有为多字节编码页面设置charset,很多浏览器就默认iso-8859-1了...

直接用ANSI或UTF-8读,不能用ISO-8859-1解码...至于它正确的编码是什么,你就挨个试吧...郁闷的话就骂它们的程序员...
bios8086 2011-09-02
  • 打赏
  • 举报
回复
private static Encoding ConvertISO88591ForEncoding(string srcString)
{
String sResult;
Encoding rEncoding = Encoding.UTF8;
Encoding ISO88591Encoding = Encoding.GetEncoding("ISO-8859-1");
Encoding GB2312Encoding = Encoding.GetEncoding("GB2312");
byte[] srcBytes = ISO88591Encoding.GetBytes(srcString);
byte[] dstBytes = Encoding.Convert(GB2312Encoding, ISO88591Encoding, srcBytes);
char[] dstChars = new char[ISO88591Encoding.GetCharCount(dstBytes, 0, dstBytes.Length)];
ISO88591Encoding.GetChars(dstBytes, 0, dstBytes.Length, dstChars, 0);
sResult = new string(dstChars);
if (sResult.Contains("gb2312"))
rEncoding = Encoding.Default;
return rEncoding;
}
楼主给分吧,这个函数是我自己的写的,确保能用

110,534

社区成员

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

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

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