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對象的編解碼的異同,簡單直接有效。當然,上面方法寫得比較隨意,實際開發中我們完全可以寫成字符串的擴展方法進行調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM