在處理舊系統資料遷移或特定郵件協議解析時,常需將 UTF-7 編碼字串轉為 GB2312。以下提供一個可直接使用的靜態方法,涵蓋關鍵邊界情況處理。
///
/// 將 UTF-7 編碼字串轉換為 GB2312
///
/// UTF-7 編碼的輸入字串
/// GB2312 編碼的字串
public static string Utf7ToGb2312(string str7)
{
if (string.IsNullOrEmpty(str7)) return str7;
// UTF-7 以 '+' 開頭表示非 ASCII 區段,若輸入以 '&' 開頭需修正
string utf7Input = str7.StartsWith("&") ? "+" + str7.Substring(1) : str7;
// 先用 GB2312 取得位元組陣列,再透過 Encoding.Convert 轉換
byte[] gbBytes = Encoding.GetEncoding("gb2312").GetBytes(utf7Input);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF7, Encoding.Unicode, gbBytes);
return Encoding.Unicode.GetString(unicodeBytes);
}
+ 起始,但部分實作(如 IMAP)用 &,需自動修正。Encoding.Convert 需指定來源(UTF7)與目標(Unicode)編碼,中介以位元組陣列傳遞。Encoding.GetEncoding("gb2312") 明確指定目標編碼頁,避免系統預設值差異。此方法適合處理郵件主旨、舊系統匯入資料等 UTF-7 內容。若輸入已為正常 Unicode 字串,直接呼叫會產生錯誤結果,建議先偵測編碼格式再決定是否轉換。.NET Core / .NET 5+ 專案需安裝 System.Text.Encoding.CodePages 並註冊 Encoding.RegisterProvider 才能使用 GB2312。