2011年5月11日 星期三

解決使用 .Net AJAX 從Client回Server時,中文會出現亂碼的問題

情境是例如在前端有一個 TextBox 控制項,當輸入文字後要回 Server 端處理,再送資料到 Client 端。
因為不需要整頁全部送回 Server 端,所以會採用像 .Net 的 AJAX Control 來做,

<asp:UpdatePanel ID="UpdateDOCTypePanelTrigger" UpdateMode="always" runat="server">
<ContentTemplate>
<asp:TextBox ID="test" AutoPostBack="true" OnTextChanged="test_TextChanged" runat="server"></asp:TextBox>
<asp:Label ID="testInfo" runat="server"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostbackTrigger ControlID="test" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>

.
但是送中文字回 Server 會有亂碼,所以需要特別處理一下。
找到的解決方法大概有兩種:
.
第一種是

protected void test_TextChanged(object sender, EventArgs e)
{
byte[] buffer = System.Text.Encoding.Default.GetBytes(test.Text);
testInfo.Text += System.Text.Encoding.UTF8.GetString(buffer);
}

這一種有一個缺點,有時候用GetBytes會漏一個byte,
所以解出來還有可能會有一個字是亂碼。
.
另外一種

protected void test_TextChanged(object sender, EventArgs e)
{
string s = System.Text.Encoding.UTF8.GetString(Request.BinaryRead(Request.ContentLength));
System.Collections.Specialized.NameValueCollection form = HttpUtility.ParseQueryString(s);
testInfo.Text += form[test.UniqueID];
}

稍微複雜一點,但是可以正確解出來,
就用這個了吧!
.
還是有更好的解法呢?

沒有留言: