從亂碼說起
簡體/繁體系統間複製程式碼出現亂碼,根因在於**檔案位元組序列與解碼器預期的編碼不符**。
核心概念階梯
- 位元:0/1,最小儲存單位。
- 位元組:8 位元,儲存單一字元的基本單位 (ASCII 時代)。
- 編碼表/字符集:字元 ↔ 代碼點 的對應表。
- ASCII (7-bit):0-127,英文字母、數字、符號,最高位固定 0。
- 雙位元組編碼 (GB2312, Big5, Shift_JIS…):為容納漢字擴展至 16 位,相容 ASCII (首位 0/1 區分單/雙位元組)。
- Unicode (UCS-2/UTF-16):統一碼表,固定 2 或 4 位元組編碼全球字元。
- UTF-8:Unicode 的變長編碼實作,ASCII 兼容 (1 位元組),漢字 3 位元組,Emoji 4 位元組,**網路傳輸/儲存首選**。
.NET 關鍵點
string / char 內部固定 **UTF-16 (Unicode)**。
- 檔案/網路/資料庫 I/O **必須顯式指定 Encoding** (如
Encoding.UTF8),否則依賴系統預設 (ANSI) 易產生亂碼。
StreamReader/Writer、XmlReader/Writer、JsonSerializer 皆預設 UTF-8,**建議全專案統一 UTF-8 無 BOM**。