zoukankan      html  css  js  c++  java
  • JavaScript和C#通用gb2312和utf8编码解码函数简单实现

    1、javascript实现gb2312编码解码

    随便看到一段话如下:

    “老赵的jscex https://github.com/JeffreyZhao/jscex/blob/master/README-cn.md  曲线助赵拿WP7,哇哈哈”

    老赵你可能已经如雷贯耳了,但没听说过或者还不懂什么是jscex,不知道有什么人已经在使用它讨论它,或者不知道它能做出什么效果出来……充满求知欲望的你习惯性地打开浏览器进行搜索,这时候客户端应该选择什么方式的编码传参呢?

    我们知道,javascript默认编码函数有三种,即escape,encodeURIencodeURIComponent(可参考这一篇),其中encodeURI和encodeURIComponent默认都是使用utf8编码,而且它们的使用方式中没有C#那种直接指定某种编码形式的调用。但是在一些应用场景比如网站全文检索中我们又需要使用客户端gb2312编码,这一点大家可以参考对比百度google的不同编码方式,百度号称最懂中文,经试验,它对搜索关键字确实就是通过gb2312方式编码的。

    如何实现客户端gb2312编码?javascript没有现成的函数可用,老赵的jscex天生不是干这种没质量的活的,ajax调用服务端实现编码又有点迂回且浪费。所以理所当然不得不自己写一个,还好网上早就有人实现了。这里整理贴出一个经常使用的javascript的客户端gb2312编码和解码的函数,希望对您有用(代码有点长,打开须谨慎):

    encodetogb2312.js

    简单调用形式如下:

    var str = "学习老赵的jscex,哇哈哈...";
    var strEncoded = encodeToGb2312(str); //gb2312编码
    alert(strEncoded);
    alert(decodeFromGb2312(strEncoded)); //gb2312解码

    比较遗憾的地方是对中文标点支持不够,直到目前依然还没有完全解决中文标点客户端编码解码问题。

    2、客户端javascript实现通用utf8和gb2312编码解码

    有了gb2312的编码和解码方法,我们可以整理javascript的其他几个编码解码方法,进行统一调用:

    powerencodejs


    调用形式如下:

    var str = "学习老赵的jscex,哇哈哈...";
    
    var strEncoded = PowerEncode(str, encodeType.Gb2312); //gb2312编码
    
    alert(strEncoded);
    
    var strDecode = PowerDecode(strEncoded, decodeType.Gb2312); //gb2312解码
    
    alert(strDecode);

    你可能会说,上面的封装一点必要没有,从功能上确实是的。但是,如果一个团队中不同开发者调用js编码解码的时候能够统一接口,那碰到需要解决网页中编码解码问题的时候,我们是不是就不用一行一行去找到底用了哪种js编码解码函数,解决问题是不是会轻松很多呢?老赵大牛教导过我们写代码要“不优雅不舒服斯基”,这种完美主义甚至有点“强迫症”的倾向是不是也值得我们好好学习一下呢?

    3、服务端c#实现utf8和gb2312编码解码

    服务端处理编码解码相对容易,类库也丰富的多,下面简单写个方法贴上来结束本文了:

    powerencode


    直接调用如下:

            protected void Page_Load(object sender, EventArgs e)
            {
                var str = "老赵的jscex https://github.com/JeffreyZhao/jscex/blob/master/README-cn.md 曲线助赵,哇哈哈";
                var strEncode = PowerEncode(str, EncodeType.Escape);
                Response.Write("Escape:" + strEncode);
                Response.Write("<br/>");
                var strDecode = PowerDecode(strEncode, DecodeType.Unescape);
                Response.Write("Unescape:" + strDecode);
                Response.Write("<br/>");
                strEncode = PowerEncode(str, EncodeType.EncodeURI);
                Response.Write("EncodeURI:" + strEncode);
                Response.Write("<br/>");
                strDecode = PowerDecode(strEncode, DecodeType.DecodeURI);
                Response.Write("DecodeURI:" + strDecode);
                Response.Write("<br/>");
                strEncode = PowerEncode(str, EncodeType.EncodeURIComponent);
                Response.Write("EncodeURIComponent:" + strEncode);
                Response.Write("<br/>");
                strDecode = PowerDecode(strEncode, DecodeType.DecodeURIComponent);
                Response.Write("DecodeURIComponent:" + strDecode);
                Response.Write("<br/>");
                strEncode = PowerEncode(str, EncodeType.Gb2312);
                Response.Write("Gb2312:" + strEncode);
                Response.Write("<br/>");
                strDecode = PowerDecode(strEncode, DecodeType.Gb2312);
                Response.Write("Gb2312:" + strDecode);
            }

    上面这种方法是直接引用Microsoft.JScript;命名空间利用js语法进行javascript的对应编码和解码,除了gb2312编码解码外,不用再区分HttpUtility还是Server对象的编解码的异同,简单直接有效。当然,上面方法写得比较随意,实际开发中我们完全可以写成字符串的扩展方法进行调用。

  • 相关阅读:
    树状数组求区间最大值
    ABP Zero最新版源码
    abp zero mysql版正式发布
    基于ABP的Easyui admin framework正式开放源代码
    【推荐】ImageProcessor.Web,再也不用自己生成缩略图了
    ABP教程(四)- 开始一个简单的任务管理系统
    Abp Framework中文文档上线
    【开源】基于EF6+MVC5+API2+Easyui1.4.5+Easyui管理模板开发的管理系统
    web+ admin template,spa管理应用后台,easyui后台正式发布
    ABP教程(三)- 开始一个简单的任务管理系统 – 后端编码
  • 原文地址:https://www.cnblogs.com/jeffwongishandsome/p/2300549.html
Copyright © 2011-2022 走看看