首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 Oracle 中文亂碼另類方案:客戶端同步 WE8ISO8859P1 再程式碼轉碼

     編輯:Oracle 資料庫相關知識

專案環境:伺服器字元集 AMERICAN_AMERICA.WE8ISO8859P1 (西歐編碼,對應 .NET iso-8859-1),無權修改伺服器。客戶端嘗試各種 NLS_LANG 仍亂碼。

反直覺解法

  1. 客戶端 NLS_LANG **同樣設為** AMERICAN_AMERICA.WE8ISO8859P1 (與伺服器一致),讓 Oracle 不做字元集轉換,原始位元組透傳。
  2. 在應用程式層 (C#) 手動將 iso-8859-1 位元組轉為系統預設編碼 (GB2312/UTF-8)。

C# 轉碼函數

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 位元組 → 自行解碼為目標編碼。適用於無法變更伺服器字元集的舊系統整合場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved