——若破折號不在統(tǒng)一碼中該怎么辦?蘋果的PUA?Monu11α、不明體
其實我以前做了個工具用字體,這1個字體包含33,3094個名義上的統(tǒng)一碼字符,對,是三十三萬字符——不過本文不談這個。

最近出于制作上述字體的需要,翻譯了 unicode.org,Blocks-13.0.0.txt 里305個統(tǒng)一碼區(qū)段名,發(fā)布在這里:[MY1L/Unicode](https://github.com/MY1L/Unicode),這個鏈接預定在將來發(fā)布若干工具字體。
翻譯中我時常感覺到,區(qū)段名常用詞 Compatibility(兼容),還不如譯為“妥協(xié)”。這種感覺,就像在輸入「what’??s」時以為自己在撇號后多打了空格一般,最后了解到不是字體的錯,而是統(tǒng)一碼把中文全角右單彎引號“妥協(xié)”給西文引號U+2019,導致中文字體只能把西文引號做成全角。
過去知乎有人提議分配4個編碼給全角彎引號,被統(tǒng)一碼聯(lián)盟的梁海拒絕。這事我忘了鏈接不過古戰(zhàn)場應該還在知乎,有興趣可以去找找。
妥協(xié)倒不是針對中文,西文也是。統(tǒng)一碼收錄了許多種橫杠,其中:
U+2212 MINUS減號 ?,與加號+等號=等寬且與數(shù)字居中對齊,例:1?2+3=0
U+2010 HYPHEN連字號 ‐,與西文居中對齊,例:α‐ω
顯然這一高一矮兩種居中對齊不可兼得,但鍵盤按??-?出現(xiàn)的默認字符既不是減號也不是連字號,而是U+002D HYPHEN-MINUS——噢天殺的“連及減”號,讓字體設計師不知跟誰對齊只能當混血連字號設計,直到OpenType等技術出現(xiàn)。

我想這應該是打字機時代的歷史遺留問題,為了環(huán)保?打字機合并了很多按鍵,比如數(shù)字“0 1”被合并到英文,刪除是退個格再打個英文“x”,許多按鍵遺留到ASCII編碼,當然也被統(tǒng)一碼繼承,包括退格鍵也是個字符:U+0008[BS]BACKSPACE
說到破折號,中文排版規(guī)定是這樣:兩漢字寬,與漢字字框居中對齊,左右不頂格,中間不斷開,統(tǒng)一碼不存在。
截止統(tǒng)一碼13.0,已用碼點28,3506個(咦),但就是沒有破折號。
因為統(tǒng)一碼把破折號“妥協(xié)”給2個U+2014 EM DASH M寬連接號?— 啦。這個號實際用途從名稱就能看出來,與漢字居中對齊還能勉強,左右不頂格且中間不斷開這哪能做得到。
2015年,思源字體設計師琢磨出一個辦法:統(tǒng)一碼的標點補充區(qū)段,有個西文標點U+2E3A TWO-EM DASH兩倍M寬連接號 ?(通稱 omission dash)能借來用用。使用OpenType特性 'ccmp'(字形組合)在遇到連續(xù)兩U+2014— 時替換成U+2E3A?,然后判斷系統(tǒng)地域是不是設定在中日韓,若是,用特性 'locl'(區(qū)域指定)改成與漢字居中對齊的字形,算是在排版上解決了。
因此可以用思源系列字體展現(xiàn)符合排版的破折號。當然如果軟件不支持OpenType特性那就談不上了,好在目前較新瀏覽器至少默認開啟 'ccmp'。

統(tǒng)一碼里有個區(qū)段 U+E000?U+F8FF Private Use Area 私用區(qū),縮寫PUA,跟那個詞縮寫一樣。
去年蘋果有個宣傳動畫,很多果粉興奮地給這個視頻刷彈幕U+F8FF“?”

……希望熱愛設計的果粉發(fā)彈幕前能先想一下,即便蘋果是個偉大的公司也偉大不過破折號,統(tǒng)一碼也不至于會把它的標志收為編碼罷。
這個U+F8FF位于統(tǒng)一碼私用區(qū)末端,什么字都不是,字體想讓它顯示什么就是什么。蘋果自家字體在這放個自己的標志無可厚非,但b站不是蘋果獨占,有其它平臺的人在看,非蘋果用戶只會看到奇怪的符號在刷屏。
其實如上面所說,蘋果自家字體完全可以用 'ccmp' 設定遇到 AppleLogo 這個詞組替換成??/??,這樣即使非蘋果用戶看不見果標,也知道果粉是在發(fā)“Apple Logo”。我先前也提過,蘋果字體其實已經(jīng)用類似方案在蘋果表上解決冒號與數(shù)字對齊的問題了,這又不難。


拖太久,今天先把Monu11α發(fā)布了,以后再談。
[字體預覽](https://my1l.github.io/wwwoff)
當然,Monu的'ccmp'特性早就支持自動破折號排版,也支持顯示字符U+F8FF,可以在上列頁面里測試。用的瀏覽器別太舊就行。
這次還包含了同畫風的彩色字體“Monu Zsye”,不過只有視窗系統(tǒng)可安裝使用。有關制作彩色字體的事復雜到得單獨寫一篇。
'Zsye' 在 ISO 15924 四字代碼中表示符號(symbol)的彩色繪文字(emoji)變體。
下載:[MY1L/QuQi/Release 第11版?](https://github.com/MY1L/QuQi/releases)
而我做的不明體對破折號的處理用到了U+2E3B THREE-EM DASH三倍M寬連接號 ??,想做動畫來演示,可惜沒時間,就做個GIF罷。支持的軟件可以將「??—」連字展現(xiàn)為無限延伸,下圖為瀏覽器渲染效果。

下載:[MY1L/unMing: 不明體](https://github.com/MY1L/unMing)

本來想聊聊殺蝗炸彈,也與統(tǒng)一碼實現(xiàn)有關,不過我不清楚實現(xiàn)細節(jié)就不亂說了。
顯然不是什么用戶名長達幾十GB這種玩笑,而是某大牌瀏覽器排版引擎按統(tǒng)一碼規(guī)則渲染特定字符構(gòu)成的用戶名導致內(nèi)存消耗特大。無論如何,瀏覽器決不能一家獨大。
類似這個,蘋果也出過好幾次因收一組特定字符而卡死的事,但聽說這次果家的狩獵瀏覽器沒事。