有關 Unicode 的編碼規則及 Unicode 的 BOM 可以參閱我的這一篇貼文:
"Python: 關於 Unicode 的 BOM"
在 HTML 中表示 Unicode 字元
HTML 的內容直接有支援 Unicode, 所以直接輸入或者貼上 Unicode (並以 UTF-8 編碼存檔) 即可. 不過由於部份符號有輸入 (或顯示/辨識) 的問題, 同時也為了 browser 轉譯頁面內容時不會產生定義糢糊不明的情況, HTML 還定義了一些特殊符號以編碼值轉譯的方式輸入: 例如:
- <字符用<表示
- >字符用>表示
- &字符用&表示
- 不合併縮減的空白字符用 表示
上面用的是字符的名字 (或縮寫)(註一). 除此之外, 還可以直接用字符的 10 進制編碼或 16 進制編碼表示:
例如:
- <字符用<或<表示
- >字符用>或>表示
- &字符用&或&表示
- 不合併縮減的空白字符用 或 表示
註一: Unicode 裡每一個符號都有一個對應的 HTML CODE 用的名字. 你可以查閱以下 URL 找到各種字符的名字, 10 進制編碼值, 16 進制編碼值...等等. https://www.toptal.com/designers/htmlarrows/
註二: Unicode 的編碼空間從U+0000到U+10FFFF, 可用編碼位置共 1,114,112 個, 扣除 2,048 個用作 Surrogate Pair 編碼之用, 故共有 1,112,064 個碼位 (code point). 因此16 進制編碼值的範圍是 0x0~0x10FFFF; 10 進制編碼值的範圍則是 0~1,114,111; 而且不支援 UTF-16 的 Surrogate Pair 格式, 即以一對 (二組) 16 位元資料來表示輔助平面字符 (Supplementary Planes): 第一組 16 位元編碼範圍 0xD800~0xDBFF, 加上第二組 16 位元編碼範圍 0xDC00~0xDFFF. Surrogate Pair 請參考維基百科 https://zh.wikipedia.org/zh-tw/UTF-16.
在 CSS 中表示 Unicode 字元
一般, CSS 檔裡用不到 Unicode, 除了設定 content 的內容字串. 一樣的, 你可以直接使用 Unicode 字元 (並以 UTF-8 編碼存檔), 或者使用編碼值轉譯的方式 (不論在 CSS 檔或者 HTML 檔裡的 <style> 段落). CSS 的編碼值轉譯的格式如下:
- 以\+16 進制編碼值表示 (不能用 10 進制編碼值).
- 16 進制編碼值, 長度最長為 6 個字元 (即包含 Unicode 全部的編碼空間), 前導的 0 可以不寫. 但是, 當 Unicode 字符後面接續的是 0~9, A~F (或者小寫的a~f) 時, 有二種處理方法(註三):
- 前導的 0 不可以省略, 16 進制編碼值長度必需填滿 6 個字元.
- 二者之間加上一個空白字元. 此時, 必需以一對 CR/LF (0x0D+0x0A) 來替代空白字元. 當然如果不會產生疑義的話直接用\20也是可以的.
註三: 參考 StackOverflow 問題 及 CSS 2.1 規範
直接用 Unicode 的例子:
a.up::after { content: " ↓"; }
a.down::after { content: " ↑"; }
使用 Unicode 編碼值轉譯的方式, 例如:
a.up::after { content: " \2193"; }
a.down::after { content: " \2191"; }
特殊 CASE 的例子: (a tag 前後附加 "&B W")
a.up::after { content: "\26 B\0D\0AW"; }
a.down::after { content: "\000026B W"; }
在 JS 中表示 Unicode 字元
JavaScript 同樣有支援 Unicode. 所以在 JS 的字串裡你可以直接使用 Unicode 字元 (並以 UTF-8 編碼存檔), 或者使用編碼值轉譯的方式. JS 字串的 Unicode 編碼值轉譯的格式如下:
- Unicode 的字符以\u+16 進制編碼值表示.
16 進制編碼值長度固定為 4 碼. 支援 UTF-16 的 Surrogate Pair 格式(註二). - ES6 新增 Unicode 字符以\u{+16 進制編碼值+}表示.
16 進制編碼值範圍為 0x0~0x10FFFF, 即 Unicode 所有的字符編碼空間. - 另 ASCII 字符以\x+16 進制編碼值表示.
16 進制編碼值長度固定為 2 碼.
例一:
console.log('台灣') // 直接用 Unicode
console.log('\u53F0\u7063') // 使用 Unicode 編碼值轉譯
console.log('\u{53F0}\u{7063}') // 使用 ES6 Unicode 編碼值轉譯格式.
例二: 輔助平面字符, Surrogate Pair 格式
console.log('𨄗') // 直接用 Unicode
console.log('\uD860\uDD17') // 使用 Unicode 編碼值轉譯
console.log('\u{28117}') // 使用 ES6 Unicode 編碼值轉譯格式.
切換到 Emoji 字型
Unicode 部份字元有多種變體字型, 例如: "▶" (U+25B6) 和 '◀' (U+25C0), 有 VS15 (text) 和 VS16 (emoji) 二種變種字型.
一般 PC Windows 會用 VS15 字型 (也有些字元連 PC Windows 也是預設用 VS16). 但不同系統的預設值也有些微不同, 例如: Apple iPhone, iPad 的預設值 VS16 (emoji). 如果你需要強制使用 VS15 或者 VS16 字型則需要在該字元後面加上 (U+FE0E) 或 (U+FE0F).
例如: 在 CSS 的 content 內容中, "◀" (U+25C0)
要強制使用 VS15(text), 應輸入"◀\FE0E" 或者 "\25C0\FE0E".
強制使用 VS16(emoji), 則應輸入"◀\FE0F" 或者 "\25C0\FE0F".
又如: 在 HTML 頁面中, "▶" (U+25B6)
強制使用 VS16(emoji), 應輸入▶️ 或者 ▶️. 完成效果: ▶️
強制使用 VS15(text), 則應輸入▶︎ 或者 ▶️. 完成效果: ▶︎
還有, 由網頁頁面裡拷貝後附 VS15 或 VS16 的字元, 貼上時也會有 ︎ 或 ️ 附在字元後面. 必要時可以使用文字編輯器 UltraEdit 切換成 Hex 模式來檢查. 也可以在 powershell 視窗裡輸入:
Format-Hex file_to_check
用不慣 powershell 的人可以在 cmd 視窗裡輸入 (Windows XP 及以上):
CertUtil file_to_check
注意: 網頁使用的字型 (css:font-family) 會影響到顯示結果. 例如: 本頁面預設是用 "Microsoft JhengHei" (微軟正黑體) 字型, 如果你用 PC Windows 你會看不到下表的前 4 個的 emoji 字型, 換成任一個英文字型就可以顯示出前 4 個的 emoji 字型. 使用 iPhone 或者 iPad 則不會有這個現象.
請選擇字型:
Unicode | 預設 | VS15 (text) |
VS16 (emoji) |
---|---|---|---|
U+2196 | ↖ | ↖︎ | ↖️ |
U+2197 | ↗ | ↗︎ | ↗️ |
U+2198 | ↘ | ↘︎ | ↘️ |
U+2199 | ↙ | ↙︎ | ↙️ |
U+21A9 | ↩ | ↩︎ | ↩️ |
U+21AA | ↪ | ↪︎ | ↪️ |
U+25B6 | ▶ | ▶︎ | ▶️ |
U+25C0 | ◀ | ◀︎ | ◀️ |
U+25FB | ◻ | ◻︎ | ◻️ |
U+25FC | ◼ | ◼︎ | ◼️ |
U+25FD | ◽ | ◽︎ | ◽️ |
U+25FE | ◾ | ◾︎ | ◾️ |
U+2600 | ☀ | ☀︎ | ☀️ |
U+2601 | ☁ | ☁︎ | ☁️ |
U+2602 | ☂ | ☂︎ | ☂️ |
U+2603 | ☃ | ☃︎ | ☃️ |
U+2604 | ☄ | ☄︎ | ☄️ |
U+260E | ☎ | ☎︎ | ☎️ |
U+260F | ☏ | ☏︎ | ☏️ |
U+2610 | ☐ | ☐︎ | ☐️ |
U+2611 | ☑ | ☑︎ | ☑️ |
U+2614 | ☔ | ☔︎ | ☔️ |
U+2615 | ☕ | ☕︎ | ☕️ |
U+2618 | ☘ | ☘︎ | ☘️ |
U+261D | ☝ | ☝︎ | ☝️ |
U+2620 | ☠ | ☠︎ | ☠️ |
U+2622 | ☢ | ☢︎ | ☢️ |
U+2623 | ☣ | ☣︎ | ☣️ |
U+2626 | ☦ | ☦︎ | ☦️ |
U+262A | ☪ | ☪︎ | ☪️ |
U+262E | ☮ | ☮︎ | ☮️ |
U+262F | ☯ | ☯︎ | ☯️ |
U+2638 | ☸ | ☸︎ | ☸️ |
U+2639 | ☹ | ☹︎ | ☹️ |
U+263A | ☺ | ☺︎ | ☺️ |
U+2640 | ♀ | ♀︎ | ♀️ |
U+2642 | ♂ | ♂︎ | ♂️ |
U+2648 | ♈ | ♈︎ | ♈️ |
U+2649 | ♉ | ♉︎ | ♉️ |
U+264A | ♊ | ♊︎ | ♊️ |
U+264B | ♋ | ♋︎ | ♋️ |
U+264C | ♌ | ♌︎ | ♌️ |
U+264D | ♍ | ♍︎ | ♍️ |
U+264E | ♎ | ♎︎ | ♎️ |
U+264F | ♏ | ♏︎ | ♏️ |
U+2650 | ♐ | ♐︎ | ♐️ |
U+2651 | ♑ | ♑︎ | ♑️ |
U+2652 | ♒ | ♒︎ | ♒️ |
U+2653 | ♓ | ♓︎ | ♓️ |
U+265F | ♟ | ♟︎ | ♟️ |
U+2660 | ♠ | ♠︎ | ♠️ |
U+2663 | ♣ | ♣︎ | ♣️ |
U+2665 | ♥ | ♥︎ | ♥️ |
U+2666 | ♦ | ♦︎ | ♦️ |
U+2668 | ♨ | ♨︎ | ♨️ |
U+267B | ♻ | ♻︎ | ♻️ |
U+267E | ♾ | ♾︎ | ♾️ |
U+267F | ♿ | ♿︎ | ♿️ |
Unicode | 預設 | VS15 (text) |
VS16 (emoji) |
---|---|---|---|
U+2692 | ⚒ | ⚒︎ | ⚒️ |
U+2693 | ⚓ | ⚓︎ | ⚓️ |
U+2694 | ⚔ | ⚔︎ | ⚔️ |
U+2695 | ⚕ | ⚕︎ | ⚕️ |
U+2696 | ⚖ | ⚖︎ | ⚖️ |
U+2697 | ⚗ | ⚗︎ | ⚗️ |
U+2699 | ⚙ | ⚙︎ | ⚙️ |
U+269B | ⚛ | ⚛︎ | ⚛️ |
U+269C | ⚜ | ⚜︎ | ⚜️ |
U+26A0 | ⚠ | ⚠︎ | ⚠️ |
U+26A1 | ⚡ | ⚡︎ | ⚡️ |
U+26AA | ⚪ | ⚪︎ | ⚪️ |
U+26AB | ⚫ | ⚫︎ | ⚫️ |
U+26B0 | ⚰ | ⚰︎ | ⚰️ |
U+26B1 | ⚱ | ⚱︎ | ⚱️ |
U+26BD | ⚽ | ⚽︎ | ⚽️ |
U+26BE | ⚾ | ⚾︎ | ⚾️ |
U+26C4 | ⛄ | ⛄︎ | ⛄️ |
U+26C5 | ⛅ | ⛅︎ | ⛅️ |
U+26C8 | ⛈ | ⛈︎ | ⛈️ |
U+26CE | ⛎ | ⛎︎ | ⛎️ |
U+26CF | ⛏ | ⛏︎ | ⛏️ |
U+26D1 | ⛑ | ⛑︎ | ⛑️ |
U+26D3 | ⛓ | ⛓︎ | ⛓️ |
U+26D4 | ⛔ | ⛔︎ | ⛔️ |
U+26E9 | ⛩ | ⛩︎ | ⛩️ |
U+26EA | ⛪ | ⛪︎ | ⛪️ |
U+26F0 | ⛰ | ⛰︎ | ⛰️ |
U+26F1 | ⛱ | ⛱︎ | ⛱️ |
U+26F2 | ⛲ | ⛲︎ | ⛲️ |
U+26F3 | ⛳ | ⛳︎ | ⛳️ |
U+26F4 | ⛴ | ⛴︎ | ⛴️ |
U+26F5 | ⛵ | ⛵︎ | ⛵️ |
U+26F7 | ⛷ | ⛷︎ | ⛷️ |
U+26F8 | ⛸ | ⛸︎ | ⛸️ |
U+26F9 | ⛹ | ⛹︎ | ⛹️ |
U+26FA | ⛺ | ⛺︎ | ⛺️ |
U+26FD | ⛽ | ⛽︎ | ⛽️ |
U+2705 | ✅ | ✅︎ | ✅️ |
U+270D | ✍ | ✍︎ | ✍️ |
U+2714 | ✔ | ✔︎ | ✔️ |
U+2716 | ✖ | ✖︎ | ✖️ |
U+2764 | ❤ | ❤︎ | ❤️ |
U+27A1 | ➡ | ➡︎ | ➡️ |
U+27D0 | ⟐ | ⟐︎ | ⟐️ |
U+2934 | ⤴ | ⤴︎ | ⤴️ |
U+2935 | ⤵ | ⤵︎ | ⤵️ |
U+2B05 | ⬅ | ⬅︎ | ⬅️ |
U+2B06 | ⬆ | ⬆︎ | ⬆️ |
U+2B07 | ⬇ | ⬇︎ | ⬇️ |
U+2B1B | ⬛ | ⬛︎ | ⬛️ |
U+2B1C | ⬜ | ⬜︎ | ⬜️ |
U+2B50 | ⭐ | ⭐︎ | ⭐️ |
U+2B55 | ⭕ | ⭕︎ | ⭕️ |
U+3297 | ㊗ | ㊗︎ | ㊗️ |
U+3299 | ㊙ | ㊙︎ | ㊙️ |
U+1F004 | 🀄 | 🀄︎ | 🀄️ |
U+1F300 | 🌀 | 🌀︎ | 🌀️ |
U+1F9FF | 🧿 | 🧿︎ | 🧿️ |