zoukankan      html  css  js  c++  java
  • Asp.net中Response.Charset 与Response.ContentEncoding区别

    Response.Charset  ASP.NET 中示例: <%@ Page CodePage=936 %> CodePage 告诉 IIS 按什么编码来读取 QueryString,按什么编码转换数据库中的内容……

    Response.ContentEncoding

    获取或设置输出流的 HTTP 字符集。

    Response.Charset

    获取或设置输出流的 HTTP 字符集。微软对 ContentEncoding、Charset 的解释是一字不差,其实可以这样理解:ContentEncoding 是标识这个内容是什么编码的,而 Charset 是告诉客户端怎么显示的。

    我们可以做一个实验来理解:

    实验1.

    Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.Charset = "utf-8"; Response.Write("千一网络"); 然后用浏览器打开网页,可以发现是乱码,可是用记事本查看源文件,又发现不是乱码。这就说明了:ContentEncoding 是管字节流到文本的,而 Charset 是管在浏览器中显示的。

    实验2.

    Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); 通过 Fidller,发现 HTTP 头中是:text/html; charset=gb2312。说明没有指定 Charset 时,就用 ContentEncoding 的 Charset 作为 charset。

    实验3.

    Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.Charset = "123-8"; HTTP 头中是:text/html; charset=123-8。网页显示正常,说明如果 charset 错误,仍然以 ContentEncoding 的 Charset 作为 charset。

    实验4.

    Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.Charset = ""; HTTP 头中是:text/html;。HTTP 头中没有 charset,网页显示正常,说明 HTTP 头中没有 charset,仍然以 ContentEncoding 的 Charset 作为 charset。

    附加信息:

    一.

    Response.ContentType

    获取或设置输出流中 HTTP 的 MIME 类型,比如:text/xml、text/html、application/ms-word。浏览器根据不同的内容启用不同的引擎,比如 IE6 及以上版本中就会自动将 XML 做成树状显示。

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

    这是 HTML 中的标签,不能用在 XML、JS 等文件中,它是告诉浏览器网页的 MIME、字符集。当前面的相关内容没有指定时,浏览器通过此来判断。

    二.

    使用流形成一个word文件例子

    protected void btnResponseWord_Click(object sender, EventArgs e)     {         Response.Clear(); //清空无关信息         Response.Buffer= true; //完成整个响应后再发送         Response.Charset = "GB2312";//设置输出流的字符集-中文   Response.AppendHeader("Content-Disposition","attachment;filename=Report.doc");//追加头信息         Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流的字符集         Response.ContentType = "application/ms-word ";//输出流的MIME类型         Response.Write(TextBox1.Text);         Response.End();//停止输出     }

    三.

    Response.AppendHeader使用

    @文件下载,指定默认名
    Response.AddHeader(”content-type”,”application/x-msdownload”);
    Response.AddHeader(”Content-Disposition”,”attachment;filename=要下载的文件名.rar”);
    @刷新页面
    Response.AddHeader “REFRESH”, ”60;URL=newpath/newpage.asp”
    这等同于客户机端<META>元素:
    <META HTTP-EQUIV=”REFRESH”, “60;URL=newpath/newpage.asp”
    @页面转向
    Response.Status = “302 Object Moved”
    Response.Addheader “Location”, “newpath/newpage.asp”
    这等同于使用Response.Redirect方法:
    Response.Redirect “newpath/newpage.asp”
    @强制浏览器显示一个用户名/口令对话框
    Response.Status= “401 Unauthorized”
    Response.Addheader “WWW-Authenticate”, “BASIC”
    强制浏览器显示一个用户名/口令对话框,然后使用BASIC验证把它们发送回服务器(将在本书后续部分看到验证方法)。
    @如何让网页不缓冲
    Response.Expires = 0
    Response.ExpiresAbsolute = Now() - 1
    Response.Addheader “pragma”,”no-cache”
    Response.Addheader “cache-control”,”private”
    Response.CacheControl = “no-cache
  • 相关阅读:
    ​Docker 数据卷的管理及自动构建docker镜像
    写代码有这16个好习惯,可以减少80%非业务的bug
    启动Docker“Got permission denied while trying to connect to the Docker daemon socket“问题(亲测可用)
    Docker从入门到干活,看这一篇足矣 [建议收藏]
    docker技术入门与精通(2020.12笔记总结)
    MySQL相关 死锁的发生和避免
    使用docker运行zabbixserver
    Cloudflare 是谁?
    扛得住的MySQL数据库架构
    好未来第一届PHP开源技术大会资料分享
  • 原文地址:https://www.cnblogs.com/baozi/p/3200719.html
Copyright © 2011-2022 走看看