• net2.0下的简繁转换


    规则:
     以URL地址来决定简繁的显示,zh-cn/index.htm为简体,zh-tw/index.htm为繁体。

    思路很简单,以IHttpHandler接口为基类,写一个类,用来处理HttpHandler,用ProcessRequest方法来处理客户端的请求。在ProcessRequest方法中获取url值,有zh-tw就用繁体,反之用简体。

    using System;
    using System.IO;
    using System.Data;
    using System.Configuration;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;
    using System.Text.RegularExpressions;
    using Microsoft.VisualBasic;

    导入以上命名空间,注意Microsoft.VisualBasic,要先引用一下Microsoft.VisualBasic。

    public class HtmlHttpHandler : IHttpHandler
    {
       //这里是定义的一个结构 ,与简繁转换无关,主要设定url重写的规则。
        private List<RegexInfo> _regex_list = new List<RegexInfo>();

        public HtmlHttpHandler()
        {
            DataSet ds = new DataSet();
            ds.ReadXml(ConfigurationManager.AppSettings["RegexsXml"]);
            foreach (DataRow r in ds.Tables["regex"].Rows)
                _regex_list.Add(new RegexInfo(((string)r["b"]).Trim(), ((string)r["a"]).Trim()));
        }

        //主方法

        public void ProcessRequest(HttpContext context)
        {
            string path = context.Request.Path;
            //foreach (RegexInfo r in _regex_list)
                //path = Regex.Replace(path, r._before, r._after);   //url重写
           //开始判断并转换
            if (path.IndexOf("zh-tw") != -1)
            {
                path = path.Replace("zh-tw", "zh-cn");
                 //以自定义方式过滤
                context.Response.Filter = new CnToTwStream(context.Response.Filter, context.Response.ContentEncoding);
            }
            context.Server.Transfer(path);
        }

        // Override the IsReusable property.
        public bool IsReusable
        {
            get { return true; }
        }
    }

    CnToTwStream类实现简繁的转换

    class CnToTwStream : Stream
    {
        private Stream _sink;
        private MemoryStream _ms;
        private Encoding _encoding;

        public CnToTwStream(Stream sink, Encoding encoding)
        {
            _sink = sink;
            _ms = new MemoryStream();
            _encoding = encoding;
        }

        public override bool CanRead
        {
            get { return false; }
        }

        public override bool CanSeek
        {
            get { return false; }
        }

        public override bool CanWrite
        {
            get { return true; }
        }

        public override long Length
        {
            get { return _ms.Length; }
        }

        public override long Position
        {
            get { return _ms.Position; }
            set { throw new NotSupportedException(); }
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            throw new NotSupportedException();
        }

        public override long Seek(long offset, System.IO.SeekOrigin direction)
        {
            throw new NotSupportedException();
        }

        public override void SetLength(long length)
        {
            throw new NotSupportedException();
        }

        public override void Close()
        {
            _ms.Close();
            byte[] buffer_cn = _ms.GetBuffer();
            string str_cn = _encoding.GetString( buffer_cn );
            //用Strings类的StrConv方法,其中TraditionalChinese是VisualBasic中的一个枚举
            string str_tw = Strings.StrConv(str_cn, VbStrConv.TraditionalChinese, 0);
            str_tw = str_tw.Replace("__zh-cn__", "__zh-tw__");
            byte[] buffer_tw = _encoding.GetBytes(str_tw);
            using (_sink)
            {
                _sink.Write(buffer_tw, 0, buffer_tw.Length);
            }
        }

        public override void Flush()
        {
            _ms.Flush();
        }

        public override void Write(byte[] buffer, int offset, int count)
        {
            _ms.Write(buffer, offset, count);
        }
    }

  • 相关阅读:
    Shell——2
    Vim-快捷命令
    Shell——1
    linux命令笔记
    小飞机 + zeal 安装
    linux 环境下 假设被cc攻击,请从linux日志文件找出黑客ip地址
    日志文件例子
    最大子列和的四种方法,时间复杂度递减,直至为线性复杂度
    递归很耗内存+多项式求值的两种方法+c语言计时方法
    线代 第六章 二次型
  • 原文地址:https://www.cnblogs.com/scgw/p/1303662.html
Copyright © 2020-2023  润新知