Unicode/字元編碼對照表
輸入一個字元,即可對照檢視其Unicode碼點、UTF-8位元組序列,以及JavaScript/HTML/URL/CSS轉義表示形式的免費工具。全部在瀏覽器內完成。
常見字元編碼對照表
| 字元 | 碼點 | UTF-8 | 備註 |
|---|---|---|---|
| A | U+0041 | 41 | 大寫字母(ASCII,1位元組) |
| 0 | U+0030 | 30 | 數字(ASCII,1位元組) |
| ␣ | U+0020 | 20 | 半形空格(ASCII,1位元組) |
| ! | U+0021 | 21 | 感嘆號(ASCII符號,1位元組) |
| @ | U+0040 | 40 | “at”符號(ASCII符號,1位元組) |
| © | U+00A9 | C2 A9 | 版權符號(Latin-1補充區,2位元組) |
| € | U+20AC | E2 82 AC | 歐元符號(3位元組) |
| → | U+2192 | E2 86 92 | 向右箭頭(箭頭區塊,3位元組) |
| あ | U+3042 | E3 81 82 | 日語平假名(3位元組) |
| 漢 | U+6F22 | E6 BC A2 | CJK統一表意文字(3位元組) |
| 한 | U+D55C | ED 95 9C | 韓文諺文音節(3位元組) |
| 😀 | U+1F600 | F0 9F 98 80 | 表情符號(超出基本多文種平面,4位元組,在JS中以代理對錶示) |
這個Unicode字元編碼轉換工具能做什麼
本工具接收你輸入的任意字元,同時並列顯示七種編碼表示:Unicode碼點、UTF-8位元組序列、JavaScript轉義、HTML實體(十進位制和十六進位制)、URL百分號編碼,以及CSS轉義。從字元到碼點、再從碼點到各種位元組層級表示的每一步轉換,都會在你輸入時立即在瀏覽器內完成計算,不會向伺服器傳送任何資料。
有一點值得了解:許多表情符號的碼點位於Unicode基本多文種平面(BMP,U+0000至U+FFFF)之外,因此JavaScript字串在內部會用一對代理對來表示它們,也就是兩個16位元代碼單元而非一個。本工具內部使用`codePointAt`,確保代理對總能被正確還原為單一碼點,因此表情符號能得到準確的結果,而不是兩個獨立的半字元。如果輸入多個字元,每個字元都會顯示各自的結果區塊。
這個Unicode轉換工具的使用方法
- 輸入要查詢的字元 在輸入框中輸入任意字母、符號或表情符號,也可以一次貼上多個字元。
- 檢視每個字元的結果區塊 每輸入一個字元都會出現一張獨立的卡片,展示全部七種編碼表示。
- 找到需要的表示形式 在各行中尋找與你的任務相關的格式,例如碼點、UTF-8位元組、JavaScript轉義等。
- 用複製按鈕取得數值 點選某一行旁的複製按鈕,即可只將該數值複製到剪貼簿,方便直接貼上到程式碼中。
- 嘗試其他字元 修改輸入框內容,或點選「清除」重新開始,然後輸入下一個要查詢的字元。
用好本工具的小技巧
- 輸入框可以輸入多個字元,此時會在輸入框下方分別顯示每個字元對應的結果區塊。
- 像😀這樣的表情符號超出了Unicode的基本多文種平面(BMP,U+0000至U+FFFF),因此JavaScript字串內部會用兩個程式碼單元(代理對)來表示它,這就是“JavaScript轉義”一行會顯示兩個`\uXXXX`的原因。
- CSS轉義(如`\41`)直接書寫碼點的十六進位制數字且不加字首,如果緊隨其後的字元可能被誤讀為十六進位制數字的一部分,建議在末尾加一個空格。
- 瀏覽器會將十進位制(
A)和十六進位制(A)的HTML實體視為相同結果,可根據標記習慣任選其一。 - 每一行都有複製按鈕,可直接將該值複製到剪貼簿,方便貼上到程式碼或CSS中使用。
適用場景
排查亂碼原因
當程式或資料庫顯示出意料之外的字元時,比對實際的碼點與UTF-8位元組,有助於判斷是否是編碼不一致導致的。
檢視表情符號的編碼方式
一眼看出某個表情符號在JavaScript中作為代理對需要幾個代碼單元,在UTF-8中又佔用多少位元組。
確認資料庫的字元編碼
當需要事先了解某個字元會佔用多少位元組時可以使用,例如判斷MySQL的欄位是否需要使用utf8mb4。
在HTML或CSS中嵌入特殊字元
想把符號或外語字元以HTML實體或CSS轉義的形式直接寫入程式碼時,可以直接複製正確的寫法使用。
驗證URL編碼是否正確
將實際轉換結果與預期對照,確認包含中文或符號的查詢參數是否被正確進行了百分號編碼。
術語表
- Unicode
- 為全世界每一個字元分配唯一編號(碼點)的國際字元編碼標準,旨在防止不同語言之間出現亂碼。
- 碼點
- Unicode為每個字元分配的編號,寫作
U+0041這樣的形式,即「U+」字首後跟十六進位制數字,是唯一標識某個字元的編號。 - UTF-8
- 一種將Unicode碼點在電腦中儲存或傳輸為位元組的具體編碼方案。每個字元使用1到4個可變長度位元組表示,且與ASCII完全相容,因此在網路上占據主流地位。
- UTF-16
- 一種以16位元為單位(代碼單元)表示Unicode碼點的編碼方案。JavaScript字串內部就採用這種編碼。
- 代理對
- UTF-16中用來表示超出基本多文種平面(BMP)的碼點時,所使用的兩個代碼單元的組合。大多數表情符號都需要用代理對表示。
- BMP(基本多文種平面)
- Unicode碼點空間中U+0000至U+FFFF的範圍。該範圍內的字元在UTF-16中只需一個代碼單元即可表示。
- HTML實體
- 在HTML文件中安全書寫特殊字元的方式,例如
A(十進位制)或A(十六進位制)。 - 百分號編碼
- 將URL中不允許出現的字元轉換為UTF-8位元組,並將每個位元組寫成
%XX形式的編碼方式,常用於URL中包含非ASCII文字的情況。
常見問題
A(十進位制)或A(十六進位制,帶`x`字首),且只能在HTML標記中使用。CSS轉義的寫法是`\41`——只寫十六進位制數字,不加`U+`或`x`字首——用於CSS選擇器或屬性值中。需要根據使用場景選擇正確的格式。
閒話 ― Unicode如何統一了四分五裂的字元編碼世界
在Unicode出現之前,不同國家甚至不同語言的計算機字元編碼方式千差萬別。僅日文文本就存在Shift_JIS、EUC-JP、JIS編碼等多種並存的方案,在使用不同編碼的系統之間交換文本時經常出現亂碼。1991年釋出的Unicode 1.0,正是為了解決這一混亂局面,為世界上每一種語言使用的每一個字元分配唯一的編號(碼點)。
Unicode與ISO/IEC 10646這一國際標準最初是各自獨立制定的,但後來兩者協調一致,共享相同的字元集合與碼點分配。如今Unicode已收錄超過15萬個字元(包括表情符號),並且每年都會發布新版本繼續新增新字元。
UTF-8由Ken Thompson和Rob Pike於1992年設計,其突破性在於既能與純ASCII文本完全向後相容,又能表示Unicode中的所有字元——這一設計恰好契合了網際網路的需求,此後UTF-8已成為網際網路文件事實上的標準編碼。