关于“无法从传输连接中读取数据: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误的解决方法之一

 今天在论坛看到一个问题

http://topic.youkuaiyun.com/u/20091112/20/4549b0dd-f6b5-4252-8a98-3e7d8f40ee5e.html

 

原来的代码如下,该页面明明是iso-8859-1编码,但是用该编码读取总是报错,用GB2312编码虽然能直接读取,但内容不正确

后来把HttpWebResponse的所有属性方法都看了一下,看到StatusCode属性时就想是不是还没准备好呢,显示状态试试

谁知道获取过StatusCode的值后就能顺利读取了,虽然解决了该贴的问题

但不知道为什么获取过StatusCode的值后就能顺利读取

有谁知道的话告诉一下,谢谢。

更改后的代码如下:

一、以上问题引用 qldsrx (青龙白虎)的答案

网络的流是抽象的,ReadToEnd的调用必须是流可以关闭的情况下才可以这么做,但是如果StatusCode 不为 HttpStatusCode.OK的话,读取流就会出错,所以你那代码也是不正确的,你获取了StatusCode后,应该比较是否为 HttpStatusCode.OK,是的话才能执行下面的过程。

 

二、引用 ojlovecd (天行健)的指点

在输出结果前增加一句

Console.OutputEncoding = Encoding.GetEncoding("iso-8859-1");
Console.OutputEncoding = Encoding.GetEncoding("iso-8859-1");


控制台程序输出不了某些unicode字符,除非你把操作系统的语言区域调成要输出的编码地区

三、以上两点都可以在贴子”折腾一两天了,WebRequest乱码解决不了!

“中找到。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值