| 編碼 | 漢字 | 英文/數字 | 備註 |
|---|---|---|---|
| UTF-16BE | 2 字節 | 2 字節 | 固定長度,大端序 |
| UTF-8 | 3 字節 | 1 字節 | 變長,ASCII 兼容 |
| GBK | 2 字節 | 1 字節 | 中文 Windows 預設 |
| ANSI | 2 字節 | 1 字節 | 中文環境下等同 GBK |
char / String 內部採用 UTF-16BE(雙字節)char 可存一個漢字(BMP 範圍),補充字符需 代碼點 / char[] 組合// 錯誤:bytes 為 UTF-8,卻用 GBK 解碼 → 亂碼
String str = new String(bytes); // 平台預設 GBK
// 正確:顯式指定編碼
String str = new String(bytes, StandardCharsets.UTF_8); // Java 7+
// 或
String str = new String(bytes, "UTF-8");
// 讀取:指定編碼
try (BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) {
String line;
while ((line = br.readLine()) != null) { ... }
}
// 寫入:指定編碼
try (BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) {
bw.write(content);
}
-encoding UTF-8)掌握「字節序列 ↔ 字符串」雙向轉換的編碼一致性原則,是解決 99% 亂碼問題的關鍵。