老话重提.怎么简单的转换字符串编码?或者获取网页的时候自动判断编码?
为了能稍微通用.我获取网页的时候想用
StreamReader strResponse = new StreamReader(Response.GetResponseStream(), Encoding.ASCII);
然后获取回来的内容在更具网页中的charset判断编码格式.我应该怎么操作?
比如获取的网页编码是gb2312的.应该如何转换ascii到 gb2312?
问题点数:20、回复次数:7Top
1 楼boyyao(迷失在网络 (问题不解答扣分也不结贴!))回复于 2006-03-20 15:44:05 得分 0
我发现如果用Encoding.ascii获取的网页所有中文都成?????了.
可能已经丢失了中文信息了.
我用utf8抓回来可以么?抓回来是一堆乱码.这些乱码还能转换到gb2312么?如果不指定编码默认的好像就是utf8的.或者我应该怎么做?
Top
2 楼boyyao(迷失在网络 (问题不解答扣分也不结贴!))回复于 2006-03-20 15:59:12 得分 0
我现在用的.
StreamReader strResponse = new StreamReader(Response.GetResponseStream(), enc); //enc是GB2312的编码
string str = strResponse.ReadToEnd();
Response.Close();
strResponse.Close();
Regex regEncoding = new Regex(@"charset=([\w-]*)\.*");
Match m = regEncoding.Match(str);
if (m.Success)
{
Encoding getenc = Encoding.GetEncoding(m.Groups[1].ToString());
byte[] gbytes = enc.GetBytes(str);
return getenc.GetString(gbytes);
}
对gb2312的页面正常.可是对utf8的页面有些中文地方会少最后一个字符Top
3 楼boyyao(迷失在网络 (问题不解答扣分也不结贴!))回复于 2006-03-21 21:39:00 得分 0
UPUPTop
4 楼sswater(光杆兵)回复于 2006-03-22 16:23:47 得分 0
搂主的理解马上就要理解透彻了。
1. 首先使用 ASCII 进行读取,能够得知编码,其他部分读入的内容是不对的,但不会丢失信息。
2. 将字符串 getBytes 恢复成 "字节串",再用刚才得知的编码进行重新编码,得到正确的 "字符串"
3. 推荐搂主参考文章,理解其中的概念:
http://www.regexlab.com/zh/encoding.htm
Top
5 楼boyyao(迷失在网络 (问题不解答扣分也不结贴!))回复于 2006-03-25 22:56:09 得分 0
upupupTop
6 楼boyyao(迷失在网络 (问题不解答扣分也不结贴!))回复于 2006-03-26 16:31:14 得分 0
upupTop
7 楼net_lover(【孟子E章】)回复于 2006-03-26 16:35:20 得分 0
http://community.csdn.net/Expert/TopicView.asp?id=4633372Top




