跳到主要內容

🌐 Unicode

🌐 通用字符編碼

Unicode是計算機行業的標準,用於一致地編碼、表示和處理世界上大多數書寫系統中的文本。它為每個字符提供一個唯一的數字,不受平台、程序或語言的限制。

📝 什麼是Unicode?

Unicode是一種字符編碼標準,它:

  • 旨在包含世界上所有書寫系統的所有字符
  • 為每個字符分配一個唯一的代碼點(數字)
  • 支持現代和歷史文字、符號和表情符號
  • 實現跨不同平台的一致文本表示
  • 由Unicode聯盟維護

🔑 關鍵概念

🔢 代碼點

代碼點是表示特定字符的數值:

  • 表示為U+XXXX(其中XXXX是十六進制數)
  • 範圍從U+0000到U+10FFFF
  • 可以表示超過110萬個不同字符
  • 目前,約有144,000個字符被分配

例子:

  • U+0041:拉丁大寫字母A
  • U+4E2D:漢字「中」
  • U+1F600:咧嘴笑臉表情符號(😀)

🗺️ 平面

Unicode將其代碼點分為17個平面,每個平面包含65,536個代碼點:

  • 基本多語言平面(BMP):U+0000到U+FFFF
    • 包含最常用的字符
    • 包括拉丁文、希臘文、西里爾文、中文、日文、韓文等
  • 補充平面:U+10000到U+10FFFF
    • 包括不太常用的文字、歷史符號、表情符號等

⚙️ 字符屬性

Unicode為每個字符分配各種屬性:

  • 類別(字母、數字、標點符號、符號等)
  • 大小寫信息(大寫、小寫、標題大小寫)
  • 方向性(從左到右、從右到左)
  • 組合行為(字符如何與其他字符組合)
  • 分解(等效字符序列)

💾 Unicode編碼形式

Unicode定義了幾種編碼形式,用於在計算機記憶體中表示代碼點:

📊 UTF-8

  • 可變長度編碼,每個字符使用1到4個字節
  • ASCII字符(U+0000到U+007F)只使用1個字節
  • 網絡和現代系統中最常見的編碼
  • 向後兼容ASCII
  • 對拉丁文本節省空間

📋 UTF-16

  • 可變長度編碼,每個字符使用2或4個字節
  • BMP字符使用2個字節
  • BMP以外的字符使用4個字節(代理對)
  • 由Windows、Java、JavaScript等內部使用

📈 UTF-32

  • 固定長度編碼,每個字符使用4個字節
  • 代碼點和編碼形式之間的簡單映射
  • 空間效率較低但處理更容易
  • 在某些編程環境中使用

🔄 Unicode與早期編碼的比較

Unicode解決了早期字符編碼的局限性:

特性ASCIIISO-8859Big5/GBUnicode
字符範圍128256~20,000超過140,000
多語言支持有限有限全面
跨系統一致性
向後兼容性-與ASCII兼容與ASCII兼容與ASCII兼容(UTF-8)

💻 Unicode實踐

🔍 文本處理

  • 實現一致的排序、搜索和比較
  • 提供文本分段規則(詞邊界、換行)
  • 定義等效字符序列的標準化形式

🌍 國際化

  • 允許軟件支持多種語言
  • 實現複雜文字的文本渲染
  • 支持雙向文本(混合從左到右和從右到左)

🕸️ 網頁開發

  • HTML5默認使用UTF-8
  • CSS支持Unicode選擇器和值
  • JavaScript內部使用UTF-16

📚 常見Unicode區塊

Unicode將字符組織成邏輯區塊:

  • 🔤 基本拉丁文(ASCII):U+0000到U+007F
  • 🔡 拉丁文-1補充:U+0080到U+00FF
  • 🈶 中日韓統一表意文字:U+4E00到U+9FFF
  • 😀 表情符號:U+1F600到U+1F64F(及其他)

⚠️ 挑戰和考慮因素

🔄 標準化

  • 表示某些字符的多種方式(例如,é可以是單個代碼點或e + 重音)
  • 標準化形式(NFC、NFD、NFKC、NFKD)提供標準化表示

🎨 渲染複雜性

  • 某些文字需要複雜的渲染規則
  • 組合標記、連字和上下文形式增加了複雜性
  • 正確顯示需要適當的字體支持

⌨️ 輸入方法

  • 輸入數千個字符需要專門的方法
  • 亞洲語言的輸入法編輯器(IME)
  • 特殊符號的虛擬鍵盤和字符選擇器

理解Unicode對以下方面至關重要:

  • 🌐 開發國際化軟件
  • 🗣️ 處理多語言文本數據
  • 🔄 確保跨不同系統的正確文本處理
  • 🌍 支持具有多樣語言需求的全球用戶

Unicode代表計算機領域的重大成就,實現了真正的全球通信和信息處理。