Unicode 編碼轉換工具
文字與 Unicode 編碼互轉,支援多種格式輸出
字元碼點詳情(點選複製)
什麼是 Unicode?
Unicode(統一碼)是計算機科學領域的一項業界標準,它對世界上大部分的文字系統進行了整理、編碼。每個 Unicode 字元都有一個唯一的數字編號,稱為碼點(Code Point),通常用十六進制表示,加上 U+ 前綴,如 U+4E2D 表示漢字「中」。Unicode 編碼轉換工具可以將文字轉換為各種 Unicode 表示格式,也可以將 Unicode 編碼還原為文字。
使用方式
步驟
- 在輸入框中輸入或貼上要轉換的文字
- 選擇轉換方向:文字轉 Unicode 或 Unicode 轉文字
- 選擇輸出格式:\uXXXX 或 U+XXXX(僅編碼時可用)
- 結果自動出現,可一鍵複製或交換輸入/輸出
編碼注意事項
- Unicode 轉義格式適用於程式碼與除錯,但會降低一般文案的可讀性。
- 解碼時請檢查代理對與表情符號輸出;拆分代理對可能產生亂碼。
使用場景
技術原理
Unicode 標準(ISO/IEC 10646)為每個字元分配一個唯一的數字碼點,涵蓋 17 個平面(U+0000 到 U+10FFFF)。基本多文種平面(BMP,平面 0)涵蓋 U+0000–U+FFFF,包含幾乎所有現代書寫系統,包括 CJK 統一漢字。補充平面(1–16)容納歷史文字、罕見 CJK、emoji 和特殊用途字元。本工具在可讀文字與兩種機器導向表示之間進行轉換:JavaScript 風格的 \uXXXX 跳脫序列和標準 U+XXXX 表示法。 UTF-16 是 JavaScript 字串的內部編碼——每個 BMP 字元儲存為一個等於其碼點的 16 位元碼單元,而補充字元(U+10000 及以上)則編碼為代理對:從碼點減去 0x10000 得到 20 位元值,然後分割為 10 位元高代理(0xD800 + ((cp - 0x10000) >> 10))和 10 位元低代理(0xDC00 + ((cp - 0x10000) & 0x3FF))。本工具的編碼模式透過 String.prototype.codePointAt() 偵測補充碼點,並為 \uXXXX 格式產生正確的雙 \u 跳脫。對於 U+XXXX 格式,則直接顯示完整碼點。 解碼模式解析三種語法:\uXXXX(四位十六進位數字,僅限 BMP)、\u{XXXXX}(ES6 大括號語法,支援完整 Unicode 範圍)和 U+XXXX(可變長度十六進位的標準表示法)。正規表達式 /\\u\{([0-9a-fA-F]+)\}/g 處理大括號跳脫並傳給 String.fromCodePoint(),而 /\\u([0-9a-fA-F]{4})/g 透過 String.fromCharCode() 處理傳統跳脫。混合使用兩者可以正確重建補充字元以兩個 \u 跳脫編碼時的代理對。 UTF-8 編碼之所以相關,是因為它決定位元組長度:一個 BMP 字元如「中」(U+4E2D)編碼為 3 個 UTF-8 位元組(E4 B8 AD),而一個 emoji 如「😀」(U+1F600)需要 4 個位元組(F0 9F 98 80)。本工具的字元計數器區分碼點計數和 UTF-16 碼單元計數——這在除錯資料庫、API 或表單欄位以碼單元而非字元計數的長度限制時非常有用。
- 碼點迭代:String.prototype.codePointAt(pos) 正確傳回補充字元的完整碼點,不像 charCodeAt() 只傳回高代理——本工具使用展開運算子 [...str] 按碼點迭代,其內部呼叫字串迭代器協定
- 代理對數學:對於補充碼點 CP > 0xFFFF,高代理為 Math.floor((CP - 0x10000) / 0x400) + 0xD800,低代理為 ((CP - 0x10000) % 0x400) + 0xDC00——編碼模式套用此公式產生有效的 \uD800\uDC00 配對
- 解碼正規表達式管線:三種模式依序執行——\u{XXXXX}(ES6 大括號)→ \uXXXX(四位十六進位)→ U+XXXX(標準表示法)——fromCodePoint() 處理大括號和 U+ 路徑,fromCharCode() 處理傳統四位數路徑
- UTF-8 位元組結構:BMP 字元使用 1–3 個 UTF-8 位元組(ASCII = 1 位元組,拉丁補充 = 2 位元組,CJK = 3 位元組);補充字元使用 4 個位元組,遵循模式 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx——本工具的位元組計數器使用 new Blob([str]).size 進行精確測量
- 碼點與碼單元:單一可見字元可能佔用多個碼點(例如 é 可以是 U+00E9 或 U+0065 + U+0301 組合尖音符號)——本工具同時報告 charCount(UTF-16 碼單元)和 codepointCount(Unicode 純量值)以呈現此差異
- Unicode 平面概覽:平面 0(BMP)= 現代文字,平面 1(SMP)= 歷史文字 + emoji + 數學符號,平面 2(SIP)= 罕見 CJK,平面 14(SSP)= 標籤 + 變體選擇器,平面 15–16 = 私人使用區——編碼模式透過 codePointAt() 正確處理所有平面
- \u 與 U+ 表示法:\uXXXX 是 JavaScript/Java/C 跳脫序列(不含大括號時僅限 BMP);U+XXXX 是 Unicode 聯盟的標準表示法(至少 4 位十六進位數字,無上限)——本工具的格式切換在這些表示法之間進行轉換
範例
中文轉 Unicode 跳脫序列
輸入: 你好世界 (4 個 CJK 字元,12 個 UTF-8 位元組)
輸出: \u4f60\u597d\u4e16\u754c
備註: 僅限 BMP 碼點;常用於 JSON 字串、JavaScript 字面值與 log 檔案Emoji 轉代理對跳脫序列
輸入: 😀🎉 (2 個 emoji,皆位於 U+FFFF 之上)
輸出: \uD83D\uDE00\uD83C\uDF89
備註: 非 BMP 字元會編碼為 UTF-16 代理對;舊版 JS 引擎需以 String.fromCodePoint 來回轉換解碼 Unicode 跳脫序列
輸入: \u4e2d\u6587\u6d4b\u8bd5
輸出: 中文测试
備註: 貼入跳脫字串即可反向解碼;除錯 CJK payload 問題時,請確認輸出位元組與來源相符常見問題
這個工具會顯示每個字元的哪些資訊?
碼點(十進位與十六進位)、所屬區塊(例如 Basic Latin、CJK Unified Ideographs)、類別(字母、數字、符號、標點等)、Unicode 名稱,以及 UTF-8 / UTF-16 / UTF-32 的位元組表示。對於除錯編碼問題或挑選正確字元都很實用。
UTF-8、UTF-16 和 UTF-32 有什麼差別?
三者編碼的是相同的 Unicode 字元集。UTF-8 每碼點用 1-4 個位元組,且與 ASCII 位元組相容(網路上的主流編碼)。UTF-16 用 2 或 4 個位元組(JavaScript 與 Windows 內部使用)。UTF-32 一律用 4 個位元組(很少用於傳輸,常見於記憶體中)。
為什麼「𝓗」會變成兩個 UTF-16 編碼單元?
U+FFFF(基本多文種平面)以上的碼點,在 UTF-16 中會以「代理對」形式表示——也就是兩個 16 位元的半部。JavaScript 的 string.length 會把它算成 2,而 Array.from(str) 會視為 1。頁面同時呈現兩種視角,方便你排查長度計算上的意外。
什麼是正規化形式(NFC/NFD/NFKC/NFKD)?
Unicode 允許同一個視覺文字有多種表示——例如 é 可以是單一碼點(U+00E9),也可以是 e + 結合銳音符(U+0065 U+0301)。NFC 是合成形式,NFD 是分解形式;NFKC/NFKD 還會把相容字元折疊(½ → 1/2)。在做字串比對或雜湊前務必先正規化。
為什麼有些 emoji 顯示成方塊?
因為你瀏覽器的字型沒有對應字元。現代 emoji 會使用 ZWJ 序列(例如 👨👩👧 = 男人 + ZWJ + 女人 + ZWJ + 女孩),需要特定字型才能合成單一圖示;舊字型只會顯示三個獨立 emoji 或方塊。
怎麼用名稱查字元?
在搜尋框輸入名稱(或關鍵片段)即可。名稱遵循 Unicode 官方名稱清單(LATIN SMALL LETTER A、GREEK CAPITAL LETTER OMEGA、MUSICAL SYMBOL G CLEF)。常用 emoji 也支援「CLDR 短名稱」搜尋。
我的輸入會被上傳嗎?
不會。查詢使用瀏覽器內建的 Unicode 資料庫,不會上傳任何內容。