• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 基于字符集、字符编码与HTTP编码解码之万象详解

基于字符集、字符编码与HTTP编码解码之万象详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了http 转义字符,http特殊字符,http header 特殊字符,字符,特殊字符等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在日常编写代码过程中,常常会碰到乱码问题,一个典型的情况是浏览网页,如果网站开发者缺少经验,就会带来这种令人头疼的问题。要了解乱码的症结,我们就得从字符集和字符编码说起,先来看看它们到底是什么:
1:字符集:是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
2:字符编码:是一套法则,最常规的理解就是:让程序根据这个法则对应到相应的字符集中将byte[]存取为string。
现在,我们要来看看这些东西在 .NET 中对应的是什么。

一:字符集和字符编码
如果想得到全部的字符集,则使用 System.Text.Encoding.GetEncodings() 方法,以下代码用于列出.Net支持的全部字符集:

示例:

二:典型应用场景之 HttpWebResponse

很多人都作过页面抓取功能, HttpWebResponse 就会比较熟悉,当然如果不嫌麻烦,也可以用 Socket 实现,但是同时要解析很多属性以及处理象重定向之类的诸多问题。
 

2.1 http header 和http content是什么?
浏览一个网页,使用很多工具,或者使用.Net中的某些类进行抓取,都给我们结构化为 Http 头和正文这样的信息,其实,当我们发送一个请求,服务器返回给我们的是一串 byte[],我们完全可以自己去从这串 byte[] 解析出 http header 和 http content,它们之间其实仅仅非常简单的以两个 /r/n/ 分割开而已,历史上有著名的CRLF攻击,CR就是\r,LF就是\n,就利用的是这个规则。


2.2 我们如何察看http header,http content?
其实很简单,既然这些都是 byte[] ,所以,我们只要知道这段 byte[] 正确的字符编码规则,就能得到我们所需要看到的 html (html就是字符串而已)。使用 HttpWebResponse 这个类,就能请求一个 url ,该类自动为我们解析出了 httpheader ,有意思的是,它没有给我们解析出 content ,所以,我们需要自己完成正文的byte[] to string。
 

2.3 http content to string的具体做法
好的,实际上,httpheader  中已经告诉了我们一些字符集编码相关的信息,我们可能感兴趣,以及会混淆的这些http头如下:

那么,这些 Http 头在HttpWebResponse 中是怎么代表的呢?

一般会指定一个默认的HttpWebResponse.Charaterset,默认为"iso-8859-1"。
HttpWebResponse.ContentEncoding 代表的是 http头中 Content-Encoding,与此类似的,还有一个http头,为Transfer-Encoding。注意,很恶心的一点是

HttpResponse.ContentEncoding跟HttpWebResponse.ContentEncoding代表的不是一个东西,它和HttpResponse.Charaterset在MSDN上是一致的解释。
</div>
根据上面的说法,似乎下面的代码就能得到http content的字符编码规则:

之所以碰到以上问题,其实仅仅是因为,服务器给我们传回来的是byte[],而任何程序员在写服务器端WEB程序的时候,都有可能有意或无意的转码出不规范的byte[]来。所以,如果我们尝试从http头的Content-Type和HttpWebResponse.Charaterset想要得到编码规则,我们就败了,我们败在了有标准,但是没人严格去执行标准。

有一些颇具迷惑性的API试图在告诉我们,使用我你就能得到该流正确的Encoding了,比如,StreamReader.CurrentEncoding,我们可以把HttpWebResponse的GetResponse中读取到

byte[],放置到MemoryStream中,然后利用如下代码:


2.5 关于本例的一点补充
以上字节流的编码解码,很多地方用了Response做例子,但是,以上解码针对的是

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于字符集、字符编码与HTTP编码解码之万象详解

相关文章

  • 2017-05-28C#使用动态规划解决0-1背包问题实例分析
  • 2017-05-28PowerShell 定时执行.Net(C#)程序的方法
  • 2017-05-28C#实现写入与读出文本文件的实例代码
  • 2017-05-28C# Hashtable/Dictionary写入和读取对比详解
  • 2017-05-28C#简单发送email的方法
  • 2017-05-28超炫酷的WPF实现Loading控件效果
  • 2017-05-28C#在DataTable中根据条件删除某一行的实现方法
  • 2017-05-28.Net中的json操作类用法分析
  • 2017-05-28c#调用vc写的ocx控件示例
  • 2017-05-28C#中WebBrowser.DocumentCompleted事件多次调用问题解决方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C# WinForm捕获未处理的异常实例解析
    • C#中实现抽象类里建立静态方法
    • 关于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介绍方法
    • 轻松学习C#的ArrayList类
    • C# 格式化字符串的实现代码
    • C#实现统计字数功能的方法
    • 用C#编写ActiveX控件(三)
    • C#获取每个年,月,周的起始日期和结束日期的方法
    • 详谈C# 图片与byte[]之间以及byte[]与string之间的转换
    • .NET中实现彩色光标、动画光标及自定义光标的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有