如何在電腦或手機的系統/瀏覽器上同時正確顯示 Unicode 的多語種文字?是否有單一字體能夠解決問題?
目前常見的字體幾乎都不能同時多文種。例:
國際音標t?i???? 維吾爾 (阿拉伯字母被知乎自動過濾?)藏???????? 緬????彝?
滿???? 泰??? 梵??????? 希臘?以上字體恐怕在各位的電腦、瀏覽器、手機等上總會有一些不能正常顯示的,要麼是空白,要麼是方框,要麼能顯示字母但不能正確組合(如阿拉伯、藏、滿蒙之類)。不知有沒有現成的能同時顯示這些不同文種Unicode的字體?沒有的話,如何能同時在Android手機上正確顯示?也能選擇在不同字符集自動使用不同字體,或需要用已有字體製作一個包含多種語種庫的單一字體?這種字體如何自行製作(本人字體小白,但不麻煩的話願意學習)?(補充:我目前找到一個google noto fonts系列字體,稱可以把多種文字相對和諧地排在一起,而且是開源的,且有有襯線和無襯線、麤體和斜體的多種選擇,但仍不是一個單一的字體文件,見 https://code.google.com/p/noto/ ,放到Android手機上仍然不能一起全部顯示。)
沒有理想的。讓單一字體檔支持過多的文種並非理想方案(理由很多)。除了 Arial Unicode MS 偶爾能用一用(但也達不到你的需求),其他實在乏善可陳。
像 Windows 自帶的 Nirmala UI(多種印度系文字)和 Gadugi(多種美洲原住民語文字)這樣有明確限定的多文種字體倒還比較有意義。Code2000(以及 2001 和 2002)這一系字體的確覆蓋面廣,但字體設計質量完全是慘不忍睹,連基本西文設計都無法直視,根本沒法用;Bitstream Cyberbit 和 TITUS Cyberbit 的覆蓋面實在太小了,而且 TITUS 項目給 Cyberbit 新增的那些一樣是慘不忍睹;還有 GNU Unifont 這樣的神奇項目,點陣字體,與 Unicode 標準同步,但只管碼點顯示,不管任何 OpenType layout。維基百科上對這些 pan-Unicode 項目有一些簡單的對比,可參考:Unicode font每個字體檔各司其職,配置細緻的字體回退(fallback),這才是合理的手段。
題主說的「選擇在不同字符集自動使用不同字體」實際上就是目前已經在各排版環境中廣泛應用的字體回退機制啊,要不然你以為 Android 是怎麼讓西文用 Roboto 顯示然後中文用 Droid Sans Fallback 的?而複雜文種(比如阿拉伯字母、蒙文、天城字母、各種偏門印度系文字)無法顯示的事情,又往往不單是字體支持與否的問題。
因為 OpenType 對複雜文種的策略是,字體要在排版環境對該文種的支持基礎上來做 OpenType layout,那麼如果操作系統或瀏覽器不支持一個文種,就沒有正當途徑單單利用 OTL 字體來顯示。像 InDesign 現在不支持藏文以及 OS X 不支持蒙文就都是這種問題。另:知乎頁面現在過濾阿拉伯字母,不知到底依舊是因為原來那個 Core Text 的 bug 還是因為政治問題。因此你應當做的是:確認你的排版環境支持特定文種的 OTL,找到支持該文種的 OTL 字體(比如通過操作系統自帶字體或 Noto 這樣的項目),然後在你的排版環境中搞定字體回退配置。
至於字體回退,在 Android 或 OS X 中,修改字體配置文件;在 InDesign 或 TeX 的專業出版流程中,為不同文字指定字體也沒什麼問題。
在多字體檔加回退的路線上,目前做得最好的,就是 Google 這個錢多人善巨頭做的 Noto 項目:Google Noto Fonts ——自己去這官網看看目前已支持的文種列表就知道是個什麼情況了(題主估計沒什麼問題,但普通人估計這列表中一大半文種都沒聽說過吧)。
Noto 這個項目的目標是覆蓋整個 Unicode 字符集並為主要文種提供無襯線與襯線雙風格字體。如果看到一些文種還未支持(比如藏文),請耐心等待,因為這個項目還在瘋長中。前些日子出名的 Source Han Sans (思源黑體) / Noto Sans CJK 就是 Noto 計劃的一部分。我本來還寫了一些字體技術上的限制問題。但後來感覺,呃,題主還是不要蹚大一統單一字體檔的混水了。要理解並利用回退機制。單一的多語種 unicode 字體是存在的,比如 Bitstream Cyberbit,效果大致是:

關於一個字體按照語言顯示 Unicode 所有字元。。。顯然這裡有一個問題,一般電腦可以安裝的 OpenType 或者 TrueType 字體文件 (可由多個字型組成,如 Microsoft YaHei Microsoft YaHei UI 來自同一個字體文件) 限制每文件 glyph 數為 65535 (還是 65536? 忘記了),這麼多 glyphs 做一個能夠顯示規範的簡體中文,繁體中文,日文和韓文的字體文件都才剛剛好夠(ref Source Han Sans),況且這只是 4 種語言。如果再加上一些其它語言的文字顯然。。。即使有這種字型,由於格式不兼容,也幾乎沒有電腦可以正常使用。當然一些專業應用支持特殊字體格式另說。
回到正題。我是用 Windows Phone 回的這題,維吾爾好像木有文字,緬甸語只有方格,其它正常。
個人觀點,如果字體夠多, fallbacks 正確,是足以 cover Unicode 的。當然,簡體中文顯示成日語 — 或者反過來 — 神馬的,是沒辦法的事情,只能由開發者指定Lang 來避免。而 fallback 是由瀏覽器自動決定的,有時會不滿意甚至出錯,所以對於開發者來說,應該使用正確的 lang 屬性和兼容性好的 fallback fonts. 當然安卓的系統總共那麼小,沒有為某些沒多少人使用的語言準備字體 (甚至連繁體中文都只有簡體字型, say) 或者 fallback 不恰當,一些文字有字型卻看不到,也是有可能的。
以上。
1. 設計一種字體,以涵蓋全部Unicode字元,這種想法無法實現。因爲字體文件負責的不只是顯示出字元。在Unicode環境下,字體文件必須考慮不同字體方向、高、寬、垂直對齊方式、與變音修飾符組合等多方面問題。鑒於全球目前那麽多語種那麽多不同的書寫系統,要實現字體大一統,不現實。就算設計出來了,文件體積也很大,而且絕大多數用戶絕大部分時間根本不會用到多語種字元。2. 在操作系統支持的前提下,部分字處理工具和瀏覽器對多語種字元顯示有較好的支持。桌面環境下,Windows 7 8 10對Unicode的支持都還算行,Microsoft Word 2007及以上版本能夠處理複雜的多語種文本,Firefox目前主流版本默認開啓Graphite,在多語種支持上做得比較優秀,IE 9+也不錯。移動平臺的情況,因爲用得少,所以無法作答。3. 推薦多語種顯示檢測頁面 http://www.columbia.edu/~kermit/utf8.html。在我的系統中,IE 11, Chrome 35, Firefox 28 (我沒有及時更新)都能正常渲染。其中,IE效果最好。4. 推薦Unicode字體Charis SIL, Cardo和Gentium,這幾款字體的覆蓋面較廣,字型比較美觀。如果不計較字型,還可以用FreeSerif。可惜,這些字體都不支持中文。Windows系統自帶Segoe UI,能支持所有正式發行了當地語言版本的書寫系統。
沒有,首先要明確手機,iPhone iOS 系統, iSO 各種瀏覽器,Android 系統,Android 各種瀏覽器,電腦,Windows, Mac OS, 各種 PC 端瀏覽器,字體調用機制都是不一樣的。
即使只針對其中任意一種都不存在一個通用字體,許多特殊文字需要特殊的 layout,比如有的文字是幾個字元上下或斜上斜下排的,有的像 emoji 或藏文,存在兩個 unicode 才能拼成一個文字的狀況,這些布局和細則通常並不和我們常見的文字相同,並且有不兼容的。
假如把不同布局規則的字體都包含在一個字體文件的話,通常會在某些情況出現布局衝突和錯亂情況。
靠譜的方法是有一組經過嚴格測試過的字體,一個配套的 fallbacklist。基本上可以應對大部分走 fallback 原理的字體機制。
另外從開發者的角度出發,把字體分開的維護成本會遠小於都包在同一個字體裡面的,因為如果都在一個字體包里的話,只要一個字元有問題,就會牽連所有的字元,每做一次調整所有的字元都被暴露在出現 bug 的風險下,所以是極不合理。unifont不謝,覺得丑是不習慣,要麼醜死要麼缺,求處女座摺疊。
推薦閱讀:
※普通屏幕筆記本安裝黑蘋果如何選擇字體才能有完美的顯示效果?
※哪種宋體在電腦上寫文章最好看?疏密合適,看著很舒服
※為什麼 Windows 下 cmd 和 PowerShell 不能方便地自定義字體?
※word中正文每頁首行設置一個段前距離,怎麼設置?
※醫生寫的字可以有多美?
TAG:字體 | Unicode統一碼 |
