2012年5月9日 星期三

ASP.NET MVC:改變View的charset編碼(Encoding)


最近有一個case是要將資料用post的方式傳給其他業者
其中有一個參數是中文字
而對方系統是使用big5編碼(都西元2012了...)
我們當然是UTF8
這下子有點玩了
看一下我的處理方式

以前在寫php時,只要在程式裡面加了下面這一行
header('Content-type: text/html; charset=big5');
Web Server在產生網頁時,就會以big5編碼

但是asp.net mvc 3呢
我的處理方式是:
寫一個繼承ActionFilterAttribute的class

protected class Big5CharsetAttribute : ActionFilterAttribute
{
  public override void OnActionExecuted(ActionExecutedContext filterContext)
  {
    filterContext.HttpContext.Response.AddHeader("Content-Type", "text/html; charset=big5");
    filterContext.HttpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("Big5");
  }
}

重點就是這兩行
filterContext.HttpContext.Response.AddHeader("Content-Type", "text/html; charset=big5");
filterContext.HttpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("Big5");
將ASP.NET MVC預設的header和編碼改成big5

然後,Controller的action名稱前面再加上[Big5CharsetAttribute]
例如:
[Big5CharsetAttribute]
public ActionResult AutoSubmitForm()
{
//your code

return View();
}

這樣,這個action就會用big5來產生view

還沒完喔,再來是html的部份
view最好要加上這一行
<meta http-equiv="Content-Type" content="text/html; charset=big5" />

這樣兩個系統就能用中文來溝通啦。
(還是老話一句,現在是unicode的時代...)

2012年5月1日 星期二

讀書心得:序

從開始工作以來
一直保持著喜歡看書的習慣
不過大部份看的都是跟軟體開發有關的書
除了自己喜歡學習之後
深深的感覺到,軟體開發這一行
光有經驗是還不夠的
必須再吸收一些新的東西
因為你可能從前輩身上學到的,也不一定是最好的做法
軟體是會隨著時間的淬練(資料、架構、需求的擴大)
來驗證你所開發的軟體是否經得起考驗
因此必須不斷的吸收新知識,來讓自己前進

不過話說回來,我所看的書,大部份是跟系統分析、開發有關的書
之後有時間,我會慢慢的把看了這些書的心得寫上來
除了方便自己記錄之外
也讓想看這些書的人,做個參考。