🌐 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解決了早期字符編碼的局限性:
特性 | ASCII | ISO-8859 | Big5/GB | Unicode |
---|---|---|---|---|
字符範圍 | 128 | 256 | ~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代表計算機領域的重大成就,實現了真正的全球通信和信息處理。