首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 正確讀寫中文檔案:Encoding.Default 與指定編碼

     編輯:關於C語言

核心問題

StreamReader 預設編碼為 UTF-8,而非系統 ANSI 代碼頁。直接讀取 GB2312/Big5 編碼的中文文字檔會產生亂碼。

解決方案

讀取檔案

// 方案一:使用系統預設 ANSI 編碼(繁中環境為 Big5,簡中為 GB2312)
StreamReader sr = new StreamReader(@"d:\1.txt", System.Text.Encoding.Default);
string content = sr.ReadToEnd();
sr.Close();

// 方案二:明確指定 GB2312(簡體中文)
StreamReader sr = new StreamReader(@"d:\1.txt", System.Text.Encoding.GetEncoding("gb2312"));

// 方案三:.NET Core / .NET 5+ 需註冊編碼提供者
// using System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
// Encoding.GetEncoding("gb2312") 才可用

寫入檔案

// 系統預設 ANSI
StreamWriter sw = new StreamWriter(@"d:\1.txt", false, System.Text.Encoding.Default);
sw.Write("一二三");
sw.Close();

// 明確指定 GB2312
StreamWriter sw = new StreamWriter(@"d:\1.txt", false, System.Text.Encoding.GetEncoding("gb2312"));
sw.Write("一二三");
sw.Close();

編碼選擇指南

場景建議編碼代碼
跨平台、現代應用、WebUTF-8 (無 BOM)Encoding.UTF8
Windows 傳統桌面、舊系統互通系統預設 ANSIEncoding.Default
指定簡體中文舊系統GB2312 / GBKEncoding.GetEncoding("gb2312")
指定繁體中文舊系統Big5Encoding.GetEncoding("big5")

最佳實踐

  • 新專案統一 UTF-8:源碼檔、設定檔、資料檔、資料庫、網路傳輸全鏈路 UTF-8
  • 明確指定編碼:不要依賴 Encoding.Default,因跨機器執行結果不一致
  • using 區塊
  • :確保 StreamReader/Writer 正確 Dispose,釋放檔案鎖定
  • 偵測編碼:未知編碼檔案可讀取前幾位元組檢測 BOM,或使用 Ude.NetStandard、EncodingDetector 庫自動判斷
  • .NET Core 跨平台:需安裝 System.Text.Encoding.CodePages NuGet 並註冊 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) 才能使用 GB2312/Big5 等舊編碼

常見誤區

  • 以為 Encoding.Default 就是 UTF-8 → 錯,它是作業系統當前 ANSI 代碼頁
  • 以為 Encoding.Unicode 就是 UTF-8 → 錯,它是 UTF-16 LE
  • 寫入 UTF-8 讀取時用 Default → 亂碼(中文字符在 UTF-8 為 3 字節,ANSI 為 2 字節)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved