專案環境:伺服器字元集 AMERICAN_AMERICA.WE8ISO8859P1 (西歐編碼,對應 .NET iso-8859-1),無權修改伺服器。客戶端嘗試各種 NLS_LANG 仍亂碼。
AMERICAN_AMERICA.WE8ISO8859P1 (與伺服器一致),讓 Oracle 不做字元集轉換,原始位元組透傳。iso-8859-1 位元組轉為系統預設編碼 (GB2312/UTF-8)。public static string Convert8859P1ToGB2312(string s)
{
// 將字串視為 iso-8859-1 位元組陣列,再用系統預設編碼解碼
return System.Text.Encoding.Default.GetString(
System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(s));
}
原理:Oracle Client/Server 字元集相同 → 無轉換 → 應用層拿到原始 Latin1 位元組 → 自行解碼為目標編碼。適用於無法變更伺服器字元集的舊系統整合場景。