文本轉 Unicode

把文本轉換為 Unicode 碼點、HTML 實體或 JavaScript 轉義序列,並可反向解碼。完整支援輔助平面字元與 emoji。

在文本與 Unicode 碼點之間雙向轉換。 可選擇 HTML 實體、JavaScript 轉義或 U+ 表示法。兩側都可編輯,基本多文種平面之外的字元(包括所有 emoji)會作為單個碼點處理,而不會被拆成代理對。

碼點、編碼與代理對

碼點不是位元組

Unicode 為每個字元分配一個編號,稱為碼點,寫作 U+ 加十六進位制數字。A 是 U+0041, 是 U+8702,蜜蜂 emoji 是 U+1F41D。這個編號是字元的身份標識。至於如何儲存——UTF-8、UTF-16 還是 UTF-32——是另一個層面的決定,這也是本工具與「文本轉二進位制」不同的地方。

代理對陷阱

JavaScript 字串採用 UTF-16。U+FFFF 以上的碼點會被存成兩個 16 位的半值,稱為代理對。用 charCodeAt 簡單迴圈的程式碼會把一個 emoji 看成 0xD800-0xDFFF 之間兩個無意義的值,並報告 "🐝".length 等於 2。本工具按碼點迭代,因此蜜蜂 emoji 只產生一個值 U+1F41D,而不是兩個殘缺的半值。

四種輸出格式

  • HTML 十進位制實體 —— A。可用於任何 HTML 文件和 XML。
  • HTML 十六進位制實體 —— A。同樣的內容用十六進位制表示,與 Unicode 官方圖表的寫法一致。
  • JavaScript 轉義 —— \u0041。用於原始碼中的字串字面量。U+FFFF 以上必須使用花括號形式 \u{1F41D},本工具會自動輸出該形式。
  • 碼點表示法 —— U+0041。規範文件中使用的寫法。

實際用途

把非 ASCII 文本轉義為實體,可以讓它安全通過那些會破壞編碼的系統,例如老舊的郵件閘道器或配置錯誤的資料庫。檢視碼點也是排查不可見字元最快的方法:零寬空格(U+200B)和不換行空格(U+00A0)在螢幕上與普通空格毫無區別,卻會導致字串比較失敗。把可疑文本貼上進來,差異立刻可見。

開源說明:基於 JavaScript 原生的 String.prototype.codePointAt 與 String.fromCodePoint 實現,未使用第三方庫。

常見問題

為什麼一個 emoji 只輸出一個 U+1F41D 而不是兩個值?
本工具按碼點迭代,而不是按 UTF-16 碼元。Emoji 位於 U+FFFF 以上,簡單的字元迴圈會把它拆成代理對,本工具不會。
這個工具和「文本轉二進位制」有什麼區別?
本工具展示碼點,即每個字元的抽象身份;二進位制工具展示用於儲存它們的 UTF-8 位元組。一個字元可能是一個碼點,卻對應三個位元組。
可以混合多種格式一起解碼嗎?
可以。解碼器能在同一段輸入中識別 &#..;、&#x..;、\uXXXX、\u{...} 和 U+....,轉義之間的普通文本會原樣保留。
如何找出字串裡的不可見字元?
粘貼後切換到 U+ 表示法。零寬空格顯示為 U+200B,不換行空格為 U+00A0,位元組序標記為 U+FEFF——它們在螢幕上不可見,在這裡卻一目瞭然。
HTML 實體可以直接放進頁面嗎?
可以,數字字元引用在 HTML 和 XML 中都是合法的。但要注意它只轉義字元本身,不能替代對不可信內容中 <、> 和 & 的正規 HTML 轉義。
資料會離開瀏覽器嗎?
不會。轉換隻是本地的字串處理。