字元代碼查詢以純數字回答一個問題:哪個 Unicode 純量值可以識別字串中的每個字元?每個可列印的字母、每個帶有變音符號的形式、每個表情符號,以及每個不可見的控制字元(例如換行字元或零寬連接符),都有一個以 U+ 開頭、後接至少四個十六進位數字表示的代碼點,有效值的範圍從 U+0000 到 U+10FFFF。Unicode 編碼/解碼工具會在您的瀏覽器本地將字串轉換為完全相同的 U+ 序列,並將已驗證的 U+XXXX 或 \u{...} 標記轉回文字,而不會將任何資料傳送至伺服器。對初學者來說,這是直接查看字串實際內容的好方法,因為兩個在螢幕上看起來完全相同的字串,一旦暴露出不可見的代碼點,就可能帶有不同的序列。

字元代碼究竟是什麼
字元代碼是 Unicode 標準為一個抽象字元所指派的單一整數。其十六進位形式就是大家熟悉的 U+XXXX 標記法,其中 XXXX 至少四位數,使用 0 到 9 以及 A 到 F 的數字。大寫 A 是 U+0041,數字 9 是 U+0039,空白字元是 U+0020。每個代碼點都落在 U+0000 到 U+10FFFF 的範圍內,這提供了大約 110 萬個可能的值。
一個數字代表一個 Unicode 純量值。該單一值可以呈現為一個字母、一個數字、一個標點符號、一個 CJK 字元、一個音樂符號、一個歷史文字字母,或單一表情符號字符。對於大多數字元而言,代碼點與您在螢幕上所見之間的對應關係是直接的,但對於由 U+200D(零寬連接符)串接數個純量所組成的表情符號,該規則便不再適用。這就是為什麼初學者在執行查詢時,可能會看到一個可見的表情符號對應到五個 U+ 標記,並合理地懷疑哪裡出了問題。其實沒有問題;這個工具正是逐個純量地顯示字串的實際內容。
該工具在解碼時會拒絕 U+D800 到 U+DFFF 範圍內的值。該範圍保留給 UTF-16 代理對的代碼單元,它們僅作為配對的一半而存在,並不代表獨立的字元。請將 U+D800 到 U+DFFF 的排除規則理解為「一個字元」與「一個字元配對的一半」之間的差異。對於只撰寫 U+XXXX 標記的初學者來說,這種情況很少出現,但它解釋了為什麼隨機的十六進位字串有時會被拒絕。
你的第一次字元代碼查詢
若要對一小段文字執行查詢,請依照下列步驟操作。
- 開啟 Unicode 編碼/解碼工具,並選擇「文字轉代碼點」模式。
- 將確切的字元貼到輸入框中,包括不可見字元(例如結尾的換行字元),如果您懷疑有零寬連接符存在,也請一併貼上。
- 按下「轉換」按鈕,讀取下方出現的 U+ 標記清單。每個標記代表字串中的一個 Unicode 純量值。
- 如需分享,請複製該標記清單,並貼到搜尋、記錄檔或測試中。
- 若要反向操作,請切換到解碼模式,輸入以空格、逗號或換行分隔的 U+XXXX 或 \u{XXXX} 標記,然後執行「轉換」以重建文字。
此工具完全在您的瀏覽器中執行,因此貼上的文字永遠不會離開您的電腦。轉換過程是依 Unicode 純量值逐一進行,而非 JavaScript 的 UTF-16 代碼單元,這表示補充字元會保留其完整的數值,而不會被拆成兩個代理對半。實際效果是:😀 會以單一標記 U+1F600 顯示,而不是某些較舊的腳本所產生的那組笨拙配對 U+D83D U+DE00。
讀懂 U+ 輸出
結果的每一行代表一個純量值,格式為至少四位、大寫的十六進位數字。輸入「A」會得到單一標記 U+0041。字串「ABC」會得到 U+0041 U+0042 U+0043,由於每個標記都以 U+ 開頭,連續的值之間不需要分隔符。輸入中的換行字元會變成 U+000A,定位字元會變成 U+0009。該工具刻意保留控制字元與預設可忽略的代碼點,而非將其隱藏,因為初學者需要字元代碼查詢最常見的原因,就是找出隱形的不一致之處。
十六進位數字的大小寫無關緊要,因為 U+00E9 和 u+00e9 代表同一個純量值。當需要與程式語言進行比較時,十進位等效值相當實用,而這只是轉換的一小步。例如,U+1F600 的拆解如下:
0x1F600 = (1 × 16⁴) + (F × 16³) + (6 × 16²) + (0 × 16) + 0 = (1 × 65536) + (15 × 4096) + (6 × 256) + 0 + 0 = 65536 + 61440 + 1536 + 0 + 0 = 128,512
該十進位值是 😀 這個露齒笑表情符號的代碼點。同一個純量以三種不同的標記法表示——十六進位的 U+1F600、十進位的 128512,以及 JavaScript 大括號形式的 \u{1F600}——皆指向唯一一個字元。
一個可見符號,多個代碼點
這是新手最常感到意外的地方。字素簇(grapheme cluster,讀者認知為一個字元的單位)並不總是對應到單一 Unicode 純量值。女性科技人員表情符號 👩💻 是由零寬連接符串接的三個代碼點所組成的序列。
| 元件 | 代碼點 | 意義 |
|---|---|---|
| 👩 | U+1F469 | 女性 |
| 不可見連接符 | U+200D | 零寬連接符 |
| 💻 | U+1F4BB | 筆記型電腦 |
許多國旗、家庭表情符號、以多個部件組成的帶變音符號字母、區域指示符配對,以及帶有膚色修飾的表情符號,其行為都相同。兩個渲染結果完全相同的字符,可能擁有完全不同的純量序列——這正是字元代碼查詢會回傳其回傳內容、而非為每個可見字母回傳一個數字的原因。
代碼點不等於 UTF-8 位元組
代碼點為一個字元命名。UTF-8 為該字元如何以位元組形式儲存命名。它們屬於不同層次,而混淆兩者正是初學者典型的陷阱。同一組代碼點可以序列化為 UTF-8、UTF-16 或 UTF-32,並具有不同的位元組數與不同的位元組值。
| 字元 | Unicode 代碼點 | UTF-8 位元組 |
|---|---|---|
| A | U+0041 | 41 |
| é | U+00E9 | C3 A9 |
| 中 | U+4E2D | E4 B8 AD |
| 😀 | U+1F600 | F0 9F 98 80 |
| 👩💻 (三個純量) | U+1F469 U+200D U+1F4BB | F0 9F 91 A9 E2 80 8D F0 9F 92 BB |
當某個通訊協定或檔案格式在談論位元組時,它指的是最右邊那一欄;當它在談論字元時,它指的是中間那一欄。若需要位元組層級的檢視,請使用獨立的 UTF-8 位元組轉換工具,因為本工具是為了解決「字串中含有哪些抽象字元」這個問題而設計的。若您在取得代碼點後需要更深入的字元名稱查詢,請參閱官方的 Unicode 代碼圖表,其中提供正式的名稱與區塊分類。
將 U+ 標記解碼回文字
解碼模式是編碼模式的鏡像。貼上一串標記,工具便會重建出對應的文字。標記必須以 U+ 開頭,或使用 JavaScript 風格的反斜線 u 形式,包括用於補充值的大括號標記法。空格、逗號與換行皆可作為分隔符。十六進位不區分大小寫。
可正確解碼的有效範例:
- U+0048 U+0069 → Hi
- U+00E9, U+0065 → é, e(一個預先組合的帶變音符號字母與一個普通字母)
- \u{1F600} → 😀
- U+1F469 U+200D U+1F4BB → 👩💻
工具刻意拒絕的範例:
- U+D800 — 代理對的一半,並非獨立字元
- U+110000 — 超出範圍,高於 U+10FFFF
- 1F600 — 缺少 U+ 前綴
- U+GGGG — 非十六進位字元
這種拒絕行為是刻意的。一個錯誤的代理對慣例會與自身來回轉換並悄悄地產生錯誤的文字,因此工具選擇大聲失敗,而非替換成看起來合理的垃圾內容。這樣的取捨是減少了神奇還原的機會,但好處是每個解碼後的字串都來自經過驗證的 Unicode 純量值。若需要更完整的語法參考,字元代碼查詢速查表 將逐一介紹所有可接受的形式。
會改變您字串的不可見字元
初學者的查詢通常始於一串行為異常的文字:搜尋欄位拒絕應該能匹配的文字;檔名無法比較;游標位置差一個字元。字元代碼查詢通常能同時解釋這三種情況。
換行字元的編碼為 U+000A。歸位字元的編碼為 U+000D。Windows 的行尾結尾是 U+000D U+000A 這個兩個純量的序列,在 Unix 系統上看起來與 U+000A 相同,但在字串比較時會被視為不同的字串。零寬連接符會明確顯示為 U+200D。位元組順序標記顯示為 U+FEFF。不換行空格顯示為 U+00A0,看起來就像一般的 U+0020 空格,直到您將它複製到別處才會現出原形。
本工具刻意不執行正規化。預先組合的 é 是 U+00E9。視覺上相同但技術上不同的分解形式,則是純量序列 U+0065 U+0301,也就是普通的 e 後接一個組合用尖音符。兩者在多數字型中呈現相同,且皆為有效的 Unicode。它們也是不同的純量序列,因此嚴格的相等性檢查會將它們視為不同的字串。將實際的代碼點暴露出來,能讓這種差異變得可見——這正是字元代碼查詢的全部意義。
為維持複製與繪製步驟的流暢度,工具將輸入上限設定為 100,000 個代碼點,且不會查詢字元名稱、字集、易混淆狀態或語言意義。這些屬性屬於可逆的純量轉換範疇之外。不過就純量的原始檢視而言,這就是最根本的真相。
如果您正在權衡選項,給初學者的 ASCII 代碼轉換工具:平易英語的入門指南 對此有詳細介紹。