全形字寬度判斷:碼位 ≥ 0x2E80 視為雙寬
終端機與等寬字型排版要決定一個字元佔幾格時,最常見的簡化做法是:碼位 ≥
0x2E80就當成雙寬(double-width)。0x2E80是 Unicode 裡 CJK(中日韓)相關區塊的起始位置之一,所以這條線大致等於「全形 vs 半形」的分界。
CJK 相關 Unicode 區塊
| 區塊 | 範圍 | 說明 |
|---|---|---|
| CJK Radicals Supplement | U+2E80 – U+2EFF | 部首補充 |
| CJK Unified Ideographs | U+4E00 – U+9FFF | 主要漢字區 |
| CJK Compatibility Ideographs | U+F900 – U+FAFF | 相容表意文字 |
| CJK Unified Ideographs Ext A | U+3400 – U+4DBF | 擴展 A 區 |
| CJK Unified Ideographs Ext B | U+20000 – U+2A6DF | 擴展 B 區 |
為什麼是簡化做法
許多 wcwidth 實作就是這樣判的:用一個門檻取代逐區塊查表。代價是邊界情況會判錯——這個門檻以上並非全部是雙寬(例如某些標點、注音符號、非 CJK 的區塊也落在其中),而 emoji、組合字、零寬字元則需要另外處理。要精準就得查 Unicode 的 East Asian Width 屬性(W / F 才是雙寬),但那需要一張表。
實務上會踩到的地方:終端機 UI 對齊、表格排版、字串截斷(按字元數截會讓中文行變兩倍寬)、以及計算輸出是否超過終端寬度。