系統整合常面臨編碼不一:交易系統用 UTF-8,舊系統用 GB2312。ASP.NET 提供多層級編碼控制機制。
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
影響所有頁面的 Request/Response 預設編碼。
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentEncoding = Encoding.GetEncoding("gb2312");
// 之後輸出的中文即為 GB2312
}
string utf8Str = "document.write('你好');";
// UTF-8 → GB2312
Encoding utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
byte[] utf8Bytes = utf8.GetBytes(utf8Str);
byte[] gbBytes = Encoding.Convert(utf8, gb2312, utf8Bytes);
char[] gbChars = new char[gb2312.GetCharCount(gbBytes)];
gb2312.GetChars(gbBytes, 0, gbBytes.Length, gbChars, 0);
string gbStr = new string(gbChars);
// gbStr 現為 GB2312 編碼字串
public static string ConvertEncoding(string input, string fromEncoding, string toEncoding)
{
Encoding from = Encoding.GetEncoding(fromEncoding);
Encoding to = Encoding.GetEncoding(toEncoding);
byte[] fromBytes = from.GetBytes(input);
byte[] toBytes = Encoding.Convert(from, to, fromBytes);
return to.GetString(toBytes);
}
// 用法
string gb = ConvertEncoding(utf8Str, "utf-8", "gb2312");
string utf8 = ConvertEncoding(gb, "gb2312", "utf-8");
utf-8、utf-16、gb2312、big5、iso-8859-1、asciiEncoding.RegisterProvider(CodePagesEncodingProvider.Instance) 並引用 System.Text.Encoding.CodePages 套件支援更多編碼。CharSet=utf8 (MySQL) 或確認資料庫欄位 Collation。