ASP.NET中Request.Form中文亂碼的解決方案

來源:互聯網
上載者:User

背景

涉及到兩個網站的通訊,網站A有一頁面a,用提交表單的方式,傳值到網站B的頁面b。網站A統一用UTF-8編碼,網站B統一用GB2312編碼。

web.config中編碼的設定
網站A:<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />
網站B:<globalization requestEncoding="gb2312" responseEncoding="gb2312" />
解決

網上搜尋的結果,無非都是修改 web.config 檔案的requestEncoding、responseEncoding之類的,這對我來說,純屬餿主意。加之網路瘋狂地複製、粘貼、未驗證可行性等行為,一直令我髮指,直接導致搜尋結果千篇一律,找到的都是那幾篇文章,最氣憤的是其中的內容還是錯誤的。所以本人一直堅持,遇到的問題,確實驗證了可行,才在部落格貼出,以免誤人誤己。(希望沒扯得太遠)

那就自己動動腦吧,稍微梳理下,其實這個過程很簡單,就是一個UTF-8的頁面發送資料到GB2312的頁面,由於編碼不同,出現亂碼很正常,解決方案自然是統一編碼。

網頁的編碼,一是接收請求資料(requestEncoding)的編碼,一是發送響應(responseEncoding)的編碼。只要讓a頁面發送響應的編碼,b頁面接收請求的編碼一致,即可解決亂碼問題。

代碼只有一句,在a頁面Page_Load方法中加入 Response.ContentEncoding = Encoding.GetEncoding("gb2312"); 即可。 複製代碼 代碼如下:// 設定a頁面響應編碼為gb2312,保證與b頁面接收請求的編碼一致
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentEncoding = Encoding.GetEncoding("gb2312");
}

可能你會有意見,說,反過來設定b頁面接收請求的編碼與a頁面發送響應的一致,行不行呢。我試過了,不行,代碼見下,如果你知道其中原理,煩請告知,不勝感激! 複製代碼 代碼如下:// 設定b頁面接收請求的編碼為utf-8,保證與a頁面響應編碼一致,但行不通,為何??
protected void Page_Load(object sender, EventArgs e)
{
Request.ContentEncoding = Encoding.GetEncoding("utf-8");
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.