ToolAct工具行動

Unicode 編碼轉換工具

文字與 Unicode 編碼互轉,支援多種格式輸出

輸入內容
字元數: 0
碼點數: 0
轉換結果
字元數: 0

字元碼點詳情(點選複製)

輸入文字後顯示每個字元的碼點

什麼是 Unicode?

Unicode(統一碼)是計算機科學領域的一項業界標準,它對世界上大部分的文字系統進行了整理、編碼。每個 Unicode 字元都有一個唯一的數字編號,稱為碼點(Code Point),通常用十六進制表示,加上 U+ 前綴,如 U+4E2D 表示漢字「中」。Unicode 編碼轉換工具可以將文字轉換為各種 Unicode 表示格式,也可以將 Unicode 編碼還原為文字。

使用方式

步驟

  1. 在輸入框中輸入或貼上要轉換的文字
  2. 選擇轉換方向:文字轉 Unicode 或 Unicode 轉文字
  3. 選擇輸出格式:\uXXXX 或 U+XXXX(僅編碼時可用)
  4. 結果自動出現,可一鍵複製或交換輸入/輸出

編碼注意事項

  • Unicode 轉義格式適用於程式碼與除錯,但會降低一般文案的可讀性。
  • 解碼時請檢查代理對與表情符號輸出;拆分代理對可能產生亂碼。

使用場景

將文字編碼為 Unicode 轉義格式將文字轉換為 JavaScript 風格的 \uXXXX 序列或 U+XXXX 碼點表示法。超過 U+FFFF 的字元在轉義模式下會以代理對表示,而詳情網格仍顯示其完整碼點。轉換是本地的 String.prototype.codePointAt 和 fromCodePoint 處理,因此字元資料在您自行複製轉義輸出之前不會離開瀏覽器。
將 Unicode 轉義解碼回可讀文字解碼 \uXXXX、\u{. } 和 U+XXXX 模式為字元,然後複製還原的文字。這有助於檢查日誌、JSON 字串、本地化檔案以及來自程式碼或 API 的轉義片段。解碼透過頁面內的 fromCharCode 和 fromCodePoint 進行,來源字串和重建的字元不會離開瀏覽器分頁,在片段包含內部文案或未發布產品名稱時特別有用。
檢查個別碼點每個輸入字元都會列出其可見字元和 U+ 值,點選區塊即可複製該碼點。字元數和碼點數會分開顯示,這對 emoji 和其他多單元字元很重要。由於網格是從記憶體中對輸入字串的迭代建立的,整個碼點映射完全在本地渲染,不會將文字傳送到第三方 Unicode 查詢服務。
找出亂碼和雙重編碼字串貼上看起來像 'é' 或 '中文' 的字串,進行解碼,然後以疑似原始編碼(UTF-8 vs Latin-1)重新編碼,以確認來源是雙重編碼而非擷取時就已損壞。檢查完全在瀏覽器端進行:TextDecoder、碼點迭代和重新編碼都在頁面內完成,因此從日誌中提取的正式環境字串可以在不上傳的情況下進行分析。
將 emoji 和組合標記按碼點計數使用碼點網格來標記佔用多個插槽的家庭 emoji、國旗序列和組合附加符號。分開的字元數和碼點數能清楚說明為何一個「1 個字元」的字串可能佔用 7 個 UTF-16 單元。由於計數是對輸入的本地迭代,即使是包含敏感內容的字串也可以在不離開瀏覽器的情況下為資料庫欄位或傳輸格式預算進行大小估算。

技術原理

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 資料庫,不會上傳任何內容。