asp.net 使用Ajax傳中文的中級解決方案

jquery的ajax 寫死是使用utf-8 傳遞數據的,而我的webconfig配置了

 

    <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" uiCulture="zh-CN" responseHeaderEncoding="gb2312" fileEncoding="gb2312"/>

 

(這樣配置的原因是:用戶暱稱中存在很多特殊字符,只有gb2312才能支持)   

 

這樣表示,我丟給jquery的字符,他還是採用了utf-8給我傳去了後臺,後臺的handler拿到的完全是亂碼。

 

爲了解決這個問題,之前寫過一個

 

不吹牛的jquery在.net中通過gb2312傳中文的實現

 

這個主要通過get方式來傳送,從而避免了jquery的編碼,採用頁面的request和response來編碼。

實現倒是可以實現,只是有一個限制:傳遞的中文長度受限,好像是根據瀏覽器的地址欄最大長度,不可以超過256個字的。

 

那麼有沒有完美的方案呢?

 

我想到,通過.net類庫提供的Request.Forms,或者Request.QueryString得到的,都是他按照webconfig配置自動編碼、解碼的字符串,完全都不受我控制。那我是否可以從更底層獲取到byte數組,自己解碼呢?

 

最後找到Request.BinaryRead方法。

首先還是通過jquery的Ajax方法將中文傳過來,這個時候,得到的是utf8編碼的(由jquery編碼)。

在後臺:

 

 byte[] bys = context.Request.BinaryRead(context.Request.ContentLength);
                    string theStr = HttpUtility.UrlDecode(bys, Encoding.UTF8);
                    NameValueCollection pars = HttpUtility.ParseQueryString(theStr, Encoding.UTF8);

 

 

在前臺:

 jQuery.post(url,
     {MyType:"hompy.index.addLeaveMessage", hidden:hidden,ouid:g_commentouid,content:content,type:g_commenttype}  
    , function (req) { addCommentShow(req, v_btn, v_prompt); });

發佈了161 篇原創文章 · 獲贊 11 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章