HttpResponse.Filter 属性,类似于 HttpRequest.Filter,只不过一个是出口,一个是入口(想像一下停车场),在这两个点之间的数据由服务器端处理,在这两点之外的,则由用户浏览器处理。那么,在出口处能做些什么呢?当然是对数据进行一些统一的处理,比如说简繁转换、过滤非法词汇等等。

在这里说说如何做简繁转换,其实网上已经有很多例子,所以只是针对一些重点的部分说明一下:

首先,依然是实现自己的过滤器,需要继承 Stream:

public class ResponseFilter : Stream

在重写基类方法时,最重要的是 Write() 方法,所有的转换都在该方法中实现,主要代码如下:

  1. public override void Write(byte[] buffer, int offset, int count)
  2. {
  3. //判断 Session,若 Session["Lang"] 等于 "ZH-TW",则启动转换
  4. if (HttpContext.Current.Session != null && HttpContext.Current.Session["Lang"].ToString() == "ZH-TW")
  5. {
  6. //对于 UTF-8 编码,必须提供简繁字对照,为提高处理效率,应删除简繁体写法相同的字,这样至少可以减少 2/3 的字数(网上提供的字库大多包含了相同字符的)
  7. //GB 转 Big5 可使用 Microsoft.VisualBasic.Strings.StrConv 方法,不需要字库。
  8. String simple = "简体字库";
  9. String tradit = "繁體字庫";
  10. //获取当前响应流的编码方式,即使整个网站都使用 UTF-8 编码,但仍然会存在其它的编码方式,尤其是采用微软的 Ajax 控件时,若编码方式不一致,则会导致错误,动态获取编码,可避免这个问题
  11. System.Text.Encoding curEncoding = HttpContext.Current.Response.ContentEncoding;
  12. string strBuff = curEncoding.GetString(buffer);
  13. int len = strBuff.Length;
  14. System.Text.StringBuilder sbBuff = new System.Text.StringBuilder();
  15. for (int i = 0; i != len; ++i)
  16. {
  17. int index = simple.IndexOf(strBuff[i]);
  18. if (index != -1)
  19. sbBuff.Append(tradit[index]);
  20. else
  21. sbBuff.Append(strBuff[i]);
  22. }
  23. byte[] output = System.Text.Encoding.UTF8.GetBytes(sbBuff.ToString());
  24. m_sink.Write(output, 0, count);
  25. }
  26. else
  27. m_sink.Write(buffer, 0, count);
  28. }

写好自己的过滤器后,就可以加载到网站中了,注意,跟 HttpRequest.Filter 一样,HttpResponse.Filter 的加载也是在 Global.asax 的 Application_BeginRequest 事件中,另外,因为在该事件触发时,Session 尚未启动,所以不能在此使用Session 判定当前的语言,代码如下:

  1. void Application_BeginRequest(object sender, EventArgs e)
  2. {
  3. string rawUrl = Request.RawUrl.ToLower();
  4. // rawUrl.IndexOf(".axd")用於屏蔽 Asp.net Ajax 生成的异步请求。否则部分使用 Ajax 的页面会报错,原因不明。
  5. if (rawUrl.IndexOf(".axd") == -1)
  6. {
  7. this.Response.Charset = "UTF-8";
  8. this.Response.Buffer = false;
  9. this.Response.Filter = new ResponseFilter(Response.Filter);
  10. }
  11. }

至此,一个简单的网站简繁转换就完成了,但在实际应用中,出现过这样一种情况,有时在访问网站时,会提示

工作阶段状态已经建立工作阶段 ID,但由于应用程序已经清除回应而无法储存。

出现的频率不高,并且无规律,即使当前未进行转换也会出现,并且只出现在页面下方,也不像通常的错误显示一样,仅出现错误信息,而是错误信息和本来的页面都显示出来。

后来在一份文档中看到说是使用 Response.Flush、Response.Write 等导致输出缓冲区刷新的语句,有时会造成 Session 丢失(因为网站另外使用了一些 Session 来储存一些状态值),所以在 Global.asax 的创建 Session 事件中,重建网站需要的状态 Session 值:

  1. void Session_Start(object sender, EventArgs e)
  2. {
  3. //判断 Session 是否丢失
  4. if (!String.IsNullOrEmpty(Session.SessionID))
  5. {
  6. //网站状态 Session 设为默认值(这里不用管用于判断是简体还是繁体那个 Session)
  7. … …
  8. }
  9. }

问题解决。

有可能还会有这种需求,要将一些带有简体字的图片也转换为繁体,怎么办呢?呵呵,其实很简单,对需要转换的图片名称后加一个特殊的字串,比如简体的 图片名为 "image__zh__.gif“,相应的繁体图片为 "image__tw__.gif",将 __zh__ 替换为 __tw__就可以了。

转载于:https://www.cnblogs.com/top5/archive/2010/06/13/1757628.html

Asp.net使用HttpResponse.Filter 实现简繁/繁简转换相关推荐

  1. 温故js系列(7)-数组去重由慢到快由繁到简

    前端学习:教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-前端资源汇总 欢迎提issues斧正:数组去重 JavaScript-数组去 ...

  2. 数学之美 系列十五 繁与简 自然语言处理的几位精英

    数学之美 系列十五 繁与简 自然语言处理的几位精英 我在数学之美系列中一直强调的一个好方法就是简单.但是,事实上,自然语言处理中也有一些特例,比如有些学者将一个问题研究到极致,执著追求完善甚至可以说完 ...

  3. 第二节:细说一下那些由繁变简的语法

    很多人都已经知道HTML5给我们带来了很多高大上的新标签.新属性,但是却不怎么重视一些细节之处,比如:一些繁琐的语法已经变得更加的简洁了.这些变化虽不起眼,但却时刻影响着我们的日常coding.今天, ...

  4. 化繁就简 · 万物互联,华为云All-Connect企业级云网络正式发布

    随着5G.云.AI等新技术的兴起,世界迈向了万物互联的智能时代,全球经济数字化也进入了新的征程,企业的智能升级正当时.这是最好的时代,也是海量并发.复杂联接的时代.不论是IPv4地址的耗尽,还是云上原 ...

  5. 简转繁等中文转换(Golang)

    之前项目需要个简体转繁体的功能,工期太紧,就自己撸了一个,效果还行. 在做这个的过程中发现简转繁其实远比想的要复杂. 中间有很多简体字习惯的用法,在繁体中是不同的.且有些字如(後,后,臺灣,台灣) 在 ...

  6. 简转繁的JS代码(转)

    1.指定内容进行转换 程序代码 <script> //增加简繁转换功能! function bodytojt(x) {   var bodys=document.getElementByI ...

  7. 一种繁体ppt转换简体的方法(简转繁同样适用)

    一种繁体ppt转换简体的方法 <计算机科学导论>考试在即,没有被湾湾教师划重点的我们手忙脚乱,不知道如何复习.好在最后老师给了我们复习方向~~(大概是学过的都会考)~~ .老师给的复习方向 ...

  8. NLP预处理——编码、繁转简、停用词、表情、标签

    preface:随着经历的积累,觉得预处理问题愈发重要,需要整理整理. 环境:mac,anaconda2 目录 一.文本编码转换 二.繁转简 三.停用词 四.表情异常符号 五.html/json/xm ...

  9. 去繁就简,张弛有度,收发由心

    这几天总是很着急做一些自己的事情, 人很累了,一上来就就干,干的时候没办法集中注意力 结果是人累着了,事也没干好. 今天跑了几圈,躺一躺,精神好多了,预祝今晚有一个好收获. 看来还是得节制自己的欲望, ...

  10. HTML圆和圆角柜形的制作,造型越简单,工艺越复杂--外简内繁的圆角柜

    原标题:造型越简单,工艺越复杂--"外简内繁"的圆角柜 简约质朴,形式简单,结构科学,是明式家具的显著特点.而在这简单造型的背后,往往是复杂的工序, 圆角柜可以说达到了简约的极致, ...

最新文章

  1. 怎么判断几行_日语高考作文该怎么写,和汉语作文一样吗?
  2. lucene 范围过滤
  3. Android实现点击事件的4种方式
  4. 推荐3个快速开发平台 前后端都有 项目经验又有着落了
  5. 十二届 - CSU 1803 :2016(同余定理)
  6. yii 2.0 代码阅读 小记
  7. no module named 'social_core'
  8. java map的理解_java中的hashmap理解
  9. 配置FTP服务2(vsftpd 配置虚拟账号)
  10. perl里面隐式的继承
  11. C#开发笔记之22-C#中的int、long、float、double等类型都占多少个字节的内存。
  12. 大数据---数据分析师的完整流程与知识结构体系
  13. pythonsuper继承规则,深入理解Python中的super()方法
  14. 你的GAN再不听话,就把它暴力肢解了吧,有用 | Demo · 代码
  15. 树莓派安装TPLINK_WN725n v2网卡驱动
  16. HTML5_2(视频)
  17. 计算机内存体系与Java 内存模型
  18. js数组、数组嵌套根据某个字段排序(eachart图标双击事件、vue双击)
  19. 【小工具推荐】-云笔记+思维导图
  20. HTTP Status 406 -with characteristics not acceptable according to the request accept headers.

热门文章

  1. BN、LN、IN、GN、SN归一化
  2. 代码+剖析 | 感知机原理剖析及实现
  3. 20200317_决策树预测贷款申请
  4. 6.6 AdaBoost实战
  5. 深度学习2.0-12.神经网络与全连接层之数据集的加载
  6. 敏捷无敌(13)之兵不厌诈
  7. Linux重启nfs出现没有权限,Linux NFS搭建与错误提示解决
  8. uiuc工程学院计算机,UIUC的ECE「伊利诺伊大学香槟分校电气与计算机工程系」
  9. python测试用例队列_Python tornado队列示例-一个并发web爬虫代码分享
  10. ElasticSearch近似匹配调研