編碼 - Unicode等





檢查與設定本地編碼

1️⃣ 檢查目前系統的本地編碼

Windows (cmd / PowerShell)

chcp

會顯示目前的「代碼頁 (Code Page)」:

Linux / macOS (Terminal)

locale

查看 LANGLC_CTYPE 的值,例如:

LANG=zh_TW.UTF-8
---

2️⃣ 在 C++ 程式內檢查當前編碼

#include <clocale>
#include <iostream>

int main() {
    std::cout << "Current locale: " << std::setlocale(LC_ALL, nullptr) << std::endl;
}

在 Windows 通常會顯示像 CChinese (Traditional)_Taiwan.950

---

3️⃣ 設定本地編碼

Windows 命令提示字元 (cmd)

chcp 65001

→ 將命令列切換為 UTF-8。

PowerShell

$OutputEncoding = [Console]::OutputEncoding = [Text.Encoding]::UTF8

在 C++ 程式內設定

#include <clocale>

int main() {
    std::setlocale(LC_ALL, "zh_TW.UTF-8");  // 設為 UTF-8
}

或在 Windows 設定 Big5

std::setlocale(LC_ALL, "Chinese_Taiwan.950");
---

4️⃣ 建議設定



設定永久編碼

1️⃣ 問題背景

使用 chcp 65001 只能暫時改變當前命令提示字元 (cmd) 的編碼,一旦關閉視窗或重新啟動,就會恢復預設值(例如 950 Big5)。若希望讓整個系統、所有應用程式都使用 UTF-8,需在 Windows 系統層級修改「地區設定」。

---

2️⃣ 永久設定整個 Windows 使用 UTF-8

步驟一:開啟地區設定

  1. 開啟 控制台 (Control Panel)
  2. 選擇 時鐘和地區 → 地區 (Region)
  3. 切換到 管理 (Administrative) 分頁
  4. 點擊 變更系統地區設定 (Change system locale...)

步驟二:啟用 UTF-8

  1. 勾選底部的:
    ✅ Beta: 使用 Unicode UTF-8 提供全球語言支援 (Use Unicode UTF-8 for worldwide language support)
  2. 按下「確定」並重新啟動系統

重開機後,Windows Console、C++、.NET、Python 等程式的預設 locale 都會是 UTF-8。

---

3️⃣ 驗證是否生效

在 cmd 驗證

chcp

若顯示:

Active code page: 65001

即表示 UTF-8 已成為預設。

在 C++ 驗證

#include <clocale>
#include <iostream>

int main() {
    std::cout << "Current locale: " << std::setlocale(LC_ALL, nullptr) << std::endl;
}
---

4️⃣ 注意事項

---

5️⃣ 替代方案(不改整系統)

如果不想全系統改成 UTF-8,可針對某些應用設定啟動參數或程式內設定:

cmd /K chcp 65001
或在程式內呼叫:
SetConsoleOutputCP(65001);
SetConsoleCP(65001);


Unicode escape sequences

基本概念

Unicode escape sequence 是一種用純 ASCII 字元來表示 Unicode 字符的方法, 常見於程式語言原始碼、JSON、字串常值與跨平台資料交換。 當環境無法直接輸入或顯示特定字元時,會使用這種表示法。

\u 格式

最常見的格式是 \uXXXX,其中 XXXX 為 4 位十六進位數, 表示 Unicode 碼位。

\U 格式

部分語言(如 Python)支援 \UXXXXXXXX,使用 8 位十六進位數, 可直接表示所有 Unicode 碼位。

代理對表示法

在僅支援 16 位元 Unicode 的環境(如 JavaScript 舊規格)中, 超過 U+FFFF 的字元需使用代理對(surrogate pair)。

常見語言範例

JavaScript


const s = "\u4E2D\u6587";

Python


s = "\u4E2D\u6587"
s2 = "\U0001F600"

JSON


{
  "text": "\u4E2D\u6587"
}

使用時機



URL Encoding

基本概念

URL Encoding(又稱 Percent-Encoding)是一種將字元轉換為可安全用於 URL 的表示方式。 URL 僅允許特定的 ASCII 字元,其餘字元必須轉換成百分比加十六進位數的形式。

編碼格式

編碼格式為 %HH,其中 HH 是該字元位元組值的十六進位表示。 若字元在 UTF-8 下佔多個位元組,會分別編碼。

保留字元

URL 中有部分字元具有特殊語意,稱為保留字元。 是否需要編碼取決於使用位置。

未保留字元

以下字元在 URL 中可直接使用,不需編碼。

常見語言範例

JavaScript


encodeURIComponent("中文 test")
decodeURIComponent("%E4%B8%AD%E6%96%87%20test")

Python


from urllib.parse import quote, unquote

quote("中文 test")
unquote("%E4%B8%AD%E6%96%87%20test")

與加號的差異

application/x-www-form-urlencoded 格式中, 空白字元會被編碼成 +,而非 %20。 一般 URL 路徑中仍使用 %20

使用時機



Hexadecimal Escapes

基本概念

Hexadecimal Escapes 是一種使用十六進位數來表示字元的跳脫寫法, 常用於程式語言的字串常值中,用來表示特定位元組或 ASCII 字元。

\x 格式

最常見的格式是 \xHH,其中 HH 為 2 位十六進位數, 代表一個位元組的值,通常對應 ASCII 或單一位元組字元。

適用範圍

Hexadecimal Escapes 多半僅適用於單一位元組, 若使用 UTF-8 編碼的多位元組字元,需拆成多個 \xHH

常見語言支援

C / C++


char c = '\x41';

JavaScript


const s = "\x48\x65\x6C\x6C\x6F";

Python


s = "\x48\x65\x6C\x6C\x6F"

與 Unicode Escapes 的差異

使用時機



ASCII 編碼表

ASCII Hex 對應表
0x00x10x20x30x40x50x60x70x80x90xA0xB0xC0xD0xE0xF
0x00NULSOHSTXETXEOTENQACKBELBSHTLFVTFFCRSOSI
0x10DLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS
0x20!"#$%&'()*+,-./
0x300123456789:;<=>?
0x40@ABCDEFGHIJKLMNO
0x50PQRSTUVWXYZ[\]^_
0x60`abcdefghijklmno
0x70pqrstuvwxyz{|}~DEL
0x80ÇüéâäàåçêëèïîìÄÅ
0x90ÉæÆôöòûùÿÖÜ¢£¥ƒ
0xA0áíóúñѪº¿¬½¼¡«»
0xB0
0xC0
0xD0
0xE0αßΓπΣσµτΦΘΩδφε
0xF0±÷°·²


所有中文字的 Unicode 範圍

Unicode 中的中文字符主要分佈在以下幾個區段。以下列出常見的中文字符(漢字)在 Unicode 表中的各範圍,以及每個範圍的詳細說明。

Unicode 範圍說明

各範圍列表

範圍名稱 Unicode 範圍 說明
CJK Unified Ideographs 4E00–9FFF 收錄基本的中文、日文和韓文字符,是最常見的中文字範圍。
CJK Unified Ideographs Extension A 3400–4DBF 擴展A區,包含較少使用的中文字符。
CJK Unified Ideographs Extension B 20000–2A6DF 擴展B區,主要涵蓋古文字符和一些罕見漢字。
CJK Unified Ideographs Extension C 2A700–2B73F 擴展C區,進一步擴充了古文字及罕見字。
CJK Unified Ideographs Extension D 2B740–2B81F 擴展D區,包含極少使用的漢字。
CJK Unified Ideographs Extension E 2B820–2CEAF 擴展E區,主要補充更多罕見的中文字符。
CJK Unified Ideographs Extension F 2CEB0–2EBEF 擴展F區,包含更罕見的古文字和漢字。
CJK Unified Ideographs Extension G 30000–3134F 擴展G區,是最新補充的中文字符區域。
CJK Compatibility Ideographs F900–FAFF 相容區,用於與舊字符集系統的相容性,例如日文字形的不同字形。

總結

以上列出的範圍包含大部分的漢字字符,並分佈在多個不同的區域以滿足不同需求,包括現代漢字、古文字及相容字符等。對於中文字體設計或字符分析來說,這些範圍提供了完整的字體支援。

Unicode Icons



  • UTF-8字元表


    email: [email protected]
    
    T:0000
    資訊與搜尋 | 回dev首頁
    email: Yan Sa [email protected] Line: 阿央
    電話: 02-27566655 ,03-5924828