有關 Unicode 的編碼規則及 Unicode 的 BOM 可以參閱我的這一篇貼文:
"Python: 關於 Unicode 的 BOM"

在 HTML 中表示 Unicode 字元


HTML 的內容直接有支援 Unicode, 所以直接輸入或者貼上 Unicode (並以 UTF-8 編碼存檔) 即可. 不過由於部份符號有輸入 (或顯示/辨識) 的問題, 同時也為了 browser 轉譯頁面內容時不會產生定義糢糊不明的情況, HTML 還定義了一些特殊符號以編碼值轉譯的方式輸入: 例如:

  • <字符用&lt;表示
  • >字符用&gt;表示
  • &字符用&amp;表示
  • 不合併縮減的空白字符用&nbsp;表示

上面用的是字符的名字 (或縮寫)(註一). 除此之外, 還可以直接用字符的 10 進制編碼或 16 進制編碼表示:

  • 10 進制: 以&#+10 進制編碼值+;表示(註二).
  • 16 進制: 以&#x+16 進制編碼值+;表示(註二).

例如:

  • <字符用&#60;&#x3C;表示
  • >字符用&#62;&#x3E;表示
  • &字符用&#38;&#x26;表示
  • 不合併縮減的空白字符用&#160;&#xA0;表示

註一: Unicode 裡每一個符號都有一個對應的 HTML CODE 用的名字. 你可以查閱以下 URL 找到各種字符的名字, 10 進制編碼值, 16 進制編碼值...等等. https://www.toptal.com/designers/htmlarrows/

註二: Unicode 的編碼空間從U+0000U+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) 時, 有二種處理方法(註三):
  1. 前導的 0 不可以省略, 16 進制編碼值長度必需填滿 6 個字元.
  2. 二者之間加上一個空白字元. 此時, 必需以一對 CR/LF (0x0D+0x0A) 來替代空白字元. 當然如果不會產生疑義的話直接用\20也是可以的.

直接用 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), 應輸入"◀&bsol;FE0E" 或者 "&bsol;25C0&bsol;FE0E".
強制使用 VS16(emoji), 則應輸入"◀&bsol;FE0F" 或者 "&bsol;25C0&bsol;FE0F".

又如: 在 HTML 頁面中, "▶" (U+25B6)
強制使用 VS16(emoji), 應輸入▶&#xFE0F; 或者 &#x25B6&#xFE0F;. 完成效果: ▶️
強制使用 VS15(text), 則應輸入▶&#xFE0E; 或者 &#x25B6&#xFE0F;. 完成效果: ▶︎

還有, 由網頁頁面裡拷貝後附 VS15 或 VS16 的字元, 貼上時也會有 &#xFE0E;&#xFE0F; 附在字元後面. 必要時可以使用文字編輯器 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🧿🧿︎🧿️

參考文件


arrow
arrow
    創作者介紹
    創作者 MagicJackTing 的頭像
    MagicJackTing

    傑克! 真是太神奇了!

    MagicJackTing 發表在 痞客邦 留言(0) 人氣()