今天在论坛看到一个问题

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

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

static void Main( string[] args ) { string url = "http://www.scielo.br/rss.php?pid=1414-4077⟨=en"; WebRequest webRequest = WebRequest.Create( url ); webRequest.ContentType = "application/xhtml+xml"; WebResponse webResponse = webRequest.GetResponse(); Stream stream = webResponse.GetResponseStream(); StreamReader sr = new StreamReader( stream, Encoding.GetEncoding( "iso-8859-1" ) ); long i = webRequest.ContentLength; //下面一句一定要设个断点停一下,大概等待2秒才可以读取,不知道什么原因,你再查查 string html = sr.ReadToEnd(); System.Console.WriteLine( html ); System.Console.ReadKey( ); }

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

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

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

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

更改后的代码如下:

static void Main( string[] args ) { string url = "http://www.scielo.br/rss.php?pid=1414-4077⟨=en"; WebRequest webRequest = WebRequest.Create( url ); //webRequest.ContentType = "application/xhtml+xml"; WebResponse webResponse = webRequest.GetResponse(); Stream stream = webResponse.GetResponseStream(); //下一句,不知道为什么一定要读取过 StatusCode 才能正确响应。 //如果不加此句会sr.ReadToEnd(); 时 // 会报 "无法从传输连接中读取数据: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。。" string status = ( (HttpWebResponse)webResponse ).StatusCode.ToString(); //获取字符集编码 string coder = ( (HttpWebResponse)webResponse ).CharacterSet; StreamReader sr = new StreamReader( stream, Encoding.GetEncoding( coder ) ); //iso-8859-1 string html = sr.ReadToEnd(); webResponse.Close(); sr.Close(); stream.Close(); System.Console.WriteLine( html ); System.Console.ReadKey( ); }

一、以上问题引用 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乱码解决不了!
“中找到。

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

  1. Visual Studio 2015 安装过程中出现“安装包丢失或损坏”错误的解决方法

    Visual Studio 2015 下载链接: 由于官网实在是太慢了,而且有时候还打不开下载页面,所以我这里贴出了链接,大家可以使用迅雷下载(速度杠杠的) 链接:ISO镜像文件 安装方法: 将ISO ...

  2. hubbledotnet 远程连接提示:无法从传输连接中读取数据:远程主机强迫关闭一个现有的连接...

    我用本地hubbledotnet(安装32位)去连接服务器hubbledotnet(64位) 提示:无法从传输连接中读取数据:远程主机强迫关闭一个现有的连接 ...

  3. HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引

    1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...

  4. python3字典写入excel_python3:excel操作之读取数据并返回字典 + 写入的案例

    excel写入数据,使用openpyxl库 class WriteExcel: def __init__(self,path): self.path = path def write_excel(se ...

  5. 新中新二代身份证dll调用,报尝试读取或写入受保护的内存,这通常指示其他内存已损坏 这个错 ...

    新中新二代身份证dll调用问题:调用这个dll时, 到这个方法: Syn_ReadMsg(nPort, 0, ref CardMsg),就报尝试读取或写入受保护的内存.这通常指示其他内存已损坏 这个错 ...

  6. WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

    原文:WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而 ...

  7. C# winform程序运行过程中提示尝试读取或写入受保护的内存.这通常指示其他内存已损坏的

    C# winform程序运行过程中提示"尝试读取或写入受保护的内存.这通常指示其他内存已损坏的" 错误,如下图所示 查看详细信息如下 未处理System.AccessViolati ...

  8. SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法

    SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法 出处:http://jimmyli.blog.51cto.com/我站在巨人肩膀上Jimmy Li 作者 ...

  9. mysql连接数据库出现1251错误_连接MySQL数据库时出现#1251错误的解决方法

    连接MySQL数据库时出现#1251错误的解决方法 连接MySQL数据库时常会出现如下的错误提示: #1251 - Client does not support authentication pro ...

  10. showdialog 尝试读取或写入受保护的内存_共享内存在不同系统的应用与优劣详解...

    共享内存是一种使计算机程序能够同时共享内存资源以实现更高性能和更少冗余数据副本的技术.共享系统内存可以在单处理器系统.并行多处理器或集群微处理器上运行.对于分布式系统会有一些差异,但共享内存也可以其上 ...

最新文章

  1. Llinux课程计划安排
  2. Ubuntu终端多窗口分屏Terminator
  3. Java输出流需要注意的几点细节
  4. 初学者也能看懂的DPDK解析
  5. python库路径_如何设置本地python库目录/ PYTHONPATH?
  6. cifar10数据集测试有多少张图_pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)...
  7. pycharm+pyqt5配置
  8. SWT folder ‘..\framework\x86_64‘ does not exist. Please set ANDROID_SWT to point to the folder conta
  9. 怎样使用libmad
  10. Understanding Bootstrap Of Oracle Database
  11. bzoj1003 [ZJOI2006]物流运输
  12. CGB2005 JT-4(聚合工程 阿里数据源,配置项目启动项,EasyUI,树形结构,页面跳转restFul,JSON串说明,vo po,分页查询,叶子类目,Ajax嵌套,windows端口号占用)
  13. 如何在电脑上缓存哔哩哔哩的视频
  14. 新版个人所得税计算python_最新个税计算 / 个税计算器 小程序 wepy 开发
  15. 会java 学c_先学Java再学c会简单点吗?
  16. 如何写好一个数据分析报告,需要注意哪些?
  17. acwing 95. 费解的开关(蓝桥杯)
  18. thinkadmin
  19. 分布式全站爬虫——以搜狗电视剧为例
  20. DNSPod十问梁定安: 工业互联网唤醒制造业的第二个春天

热门文章

  1. 计算机组成原理——CPU
  2. 计算机组成原理 唐朔飞笔记,计算机组成原理笔记(唐朔飞版)
  3. u8系统计算机上启动不了,用友erp u8装好后为何启动不了
  4. python中len用法_python中字典len()的用法
  5. python水仙花数判断程序
  6. mysql sqlyog 1045_sqlyog错误代码1045
  7. Slurm如何管理和使用节点资源
  8. 怎么用proteus软件仿真单片机程序?
  9. adprw指令通讯案例_PLC编程入门,编写控制程序必掌握选型指令
  10. L298N 电机驱动板 - 详细介绍