題 為什麼我不應該使用Unicode字符來模擬排版樣式(例如小型大寫字母或腳本)?


Unicode包含各種字符,這些字符看起來像基本拉丁字母的字符的排版風格變體,並且允許人們以相應的排版樣式書寫文本而不訴諸標記或類似。例如,可以模擬:

  • 小帽子:

    ʙᴇʜᴏʟᴅᴛʜɪꜱꜰᴀɴᴄɪʟyᴇɴᴄᴏᴅᴇᴅᴛᴇxᴛ。

  • 腳本:

    𝓑𝓮𝓱𝓸𝓵𝓭𝓽𝓱𝓲𝓼𝓯𝓪𝓷𝓬𝓲𝓵𝔂𝓮𝓷𝓬𝓸𝓭𝓮𝓭𝓽𝓮𝔁𝓽。

  • 哥特體:

    𝕭𝖊𝖍𝖔𝖑𝖉𝖙𝖍𝖎𝖘𝖋𝖆𝖓𝖈𝖎𝖑𝖞𝖊𝖓𝖈𝖔𝖉𝖊𝖉𝖙𝖊𝖝𝖙。

這符合Stack Exchange的興趣(例如, 這裡這裡,和 這裡並且批評了這種技術。但是當我使用它們時會出現什麼問題?


123
2017-12-26 11:00


起源


我正在通過手機閱讀這篇文章,我看不到最後兩個花哨的文字。 - Scimonster
因為在某些設備上無法讀取: i.stack.imgur.com/kM73J.png - Chris Kent
因為我們中的一些人希望看到我們認為是可讀字體(以及尺寸,顏色和c)的網頁,所以我們使用例如用戶CSS樣式表以覆蓋作者樣式。您可能會注意到,即使您的三個示例顯示在我的設備上,顯然就像您希望它們出現一樣,對我來說它們只是邊緣可讀。為什麼你會把你的藝術渴望置於讀者的閱讀之上? - jamesqf
這是一個有趣的觀察:Edge在後兩個樣本中找不到文本,而Chrome在第一個樣本中找不到文本。 (在兩個瀏覽器中嘗試按Ctrl + F'ing進行BEHOLD。)沒有檢查過Firefox。 - Schism
@Schism Firefox找不到它們。看起來Chrome在搜索之前可能會使用NFKC / NFKD規範化,這會將腳本和黑名單文本分解為Basic Latin。 Firefox似乎沒有這樣做。邊緣...正在做一些奇怪的事情。 - Bob


答案:


一般

這些字符不適用於普通的拉丁字母文本,而是用於語音,西里爾字母文本,用作數學符號(代表變量)或類似字符。在基本拉丁字母表中編碼文本的唯一符合Unicode的方法是使用主要用於此目的的字符(即,從 基礎拉丁語 Unicode塊)。

與許多其他標準一樣,您應該三思而後行違反Unicode。此外,Unicode包含許多書寫系統,用例和剛才存在的用於向後兼容其他標準的東西1 完全理解其所有動機的是它自己的科學。長話短說,除非你真的知道你在做什麼, 你甚至沒有想到的東西很可能會破碎。

具體的例子

無障礙

編碼文本不僅存在以某種字體呈現。它也可以例如由屏幕閱讀器解釋。屏幕閱讀器不應該猜測是否

𝓽𝓱𝓮

是指定冠詞或數學產品2 變量𝓽,𝓱和𝓮 - 這些是為這些字符製作的。因此,最佳行為是它拼出這些字符,例如:字面意思如下:

大膽的腳本小t,大膽的腳本小h,大膽的腳本小e

它不應該只是說“the”而是因為它不會正確地讀取其符號碰巧形成可發音詞的數學文本。3

可移植性

如果您的文本在您的計算機上很好地呈現,這並不意味著它也將出現在閱讀器上。最明顯的例子是讀者沒有任何支持這些字符的字體,或者文本是由不支持後備字體的軟件呈現的。不可否認,這種情況越來越不常見。請記住,有些人喜歡閱讀障礙者需要特殊字體,這些字體不太可能支持這些字符。

但即使讀者的機器只使用不同的字體,這也可能使文本的可讀性大大降低。為一個 第一個例子,這是用兩種不同的字體渲染的:

𝓉𝒽ℯ rendered with FreeSerif and STIX

Free Serif渲染文本,因為在使用特殊字符模擬文本時,可能需要渲染文本,即使用連續筆劃模擬手寫。但是,這些字符是用作數學符號的,連接是沒有意義的。因此渲染 STIX,這是專為數學目的而設計的,更符合這些字符的使用方式。

在一個 第二個例子,假設您或讀者出於某種原因將其視為“сᴜтмy”。有了好的字體,你就會得到4

сᴜт мy вᴀʀ rendered in upright and italics. italics reads as "cum my bar"

原因是小型帽子(部分)用西里爾字母模擬,並且 西里爾字體斜體有時看起來與它們的正直斜體非常不同。再說一次,這是正確的行為。

可搜索

作為一個 第一個例子, 考慮一下你想要一個合理的搜索來處理角色𝒲(數學腳本 w ^)。假設搜索有兩種模式,即 默認模式 和 確切模式 (通常稱為 區分大小寫)。這個角色應該是:

  • 在搜索時發現 w ^ 要么 w ^ 在默認模式下 - 對於那些不想在搜索字段中輸入或複制粘貼特殊字符的人;

  • 在精確模式下搜索found時發現 - 對於那些想要搜索數學文檔中提到相應變量的人³;

  • 搜索not時找不到, w ^ 要么 w ^ 由於打破類似於上述的搜索,在精確模式下。

但是,如果您使用此字符來模擬常規文本,則應在搜索時找到它 w ^ 或𝒲在精確模式下,與上述內容相衝突。

作為一個 第二個例子 考慮到在搜索拉丁字符時永遠不會找到西里爾字符,反之亦然,因為它們完全不同。但是,如果您使用西里爾字符來模擬拉丁語小型大寫字母,那麼您需要這樣做,如果您不希望破壞可搜索性。這會導致人們發現很多無用的東西,如果他們搜索一個罕見的拉丁字母單詞,恰好恰好對應一些流行的西里爾字母單詞的虛假小帽(反之亦然)。

精確搜索選項無法解決此問題,因為這是在這些字母表中保留用於其他目的。

一般來說,不可能通過使用特殊字符來模擬風格化的拉丁文本來構建搜索(沒有瘋狂的選項)。


1你懂 XKCD關於統一標準的不可避免的失敗?好吧,Unicode成功了。
2或者相關慣例中的空操作符
3我知道現在很少有數學文本支持這種編碼或兼容它的東西,但關鍵是有一天他們希望這樣做。您的Unicode濫用文本可能仍然存在並隨後閱讀。
4除非您正在為馬其頓語或塞爾維亞語進行本地化,否則您將獲得不同但仍然不受歡迎的結果。


220
2017-12-26 11:00



評論不適用於擴展討論;這次談話已經開始了 轉移到聊天。 - Journeyman Geek♦
第三個例子怎麼樣?為什麼blackletter文本甚至存在於Unicode而不僅僅是某種字體? - posfan12
@ posfan12:它被用作一個獨特的數學字母 - 就像腳本字符一樣。 (請注意,此處的示例編號與問題中的項目符號無關。) - Wrzlprmft
你的小cpas例子暗示了一個謎題/競爭對手:找到一個有效的句子,當斜體顯示時會變成另一個句子......(兩者都由人類拉丁語讀者解釋,比如說) - Hagen von Eitzen


什麼可能出錯?好吧,我看到了這個:

enter image description here

在Windows 7上的Firefox 50.1.0中。

的問題 缺少字形在這種情況下,在移動設備上,在用戶給出的圖像中進一步示出 克里斯肯特 在 一條評論,我已裁剪並調整大小 原本的

enter image description here

和用戶 oals 和藹 貢獻 另一個例子:

enter image description here


66
2017-12-26 11:31



我? i.stack.imgur.com/lWRAa.png - oals
@Lilienthal我對你在沒有檢查或安裝更新的情況下已經過多少年印象深刻。我的意思是,我仍然在某些設備上使用基於Firefox 3.5的東西,但我沒有完全選擇(設備太好了,但沒有更新的可用瀏覽器可用) - mtraceur
@Lilienthal 2020年的某個時候,Firefox主要版本號可能需要64位數字。不久之後,版本號將佔用比實際程序更多的空間。為了重新獲得市場份額,Chrome版本號將需要整個行星來存儲它們。 - Andrew Morton
您是否知道使用這些古老的瀏覽器有多少已知和活躍的安全漏洞? - Zach Lipton
@Zach Lipton:你是否意識到我的優先事項清單上的情況如何? #1正在擁有我可以實際使用的東西。雖然Firefox人員(以及許多其他人)可能已經接受了一種新的範例:通過不可用性實現安全性。 - jamesqf


我有一個XY問題。

Y and X appear smaller than the rest of the text

在這裡,我們看到Y和X看起來比文本的其餘部分小。在某些縮放級別,它們看起來大小相同,但這似乎暴露了這種特定字體中這些特定字形的問題。


28
2017-12-26 19:46



我可以為你所看到的提供三種可能的解釋:1)不好 提示。 2)後備字體用於除了之外的所有內容 X 和 年。 3)糟糕的字體設計:小帽設計為略大於小寫字母(這是一個有效的選擇),然後用於語音和西里爾字符的Unicode字符 - 這不是一個好的選擇,因為,例如,在語音使用,這些字符必須與基本的拉丁字符協調一致。 - 無論哪種方式:點1)和3)不是由於濫用Unicode。第2點已在其他答案中得到解決。 - Wrzlprmft
@Wrzlprmft:根據定義,它們是unicode濫用,因為unicode沒有小型上限。 unicode具有的字母在Phonetic字母塊和Latin Extended-D塊中看起來像小字幕。具體來說,兩個Phonetic塊和Latin Extended-D塊都不包含看起來像小帽的字母 X因此,我的猜測是 X 來自其他地方,可能是西里爾文塊。差異是由1,2和3引起的。它是由屬於另一個字母表的字母引起的。 - slebetman
@slebetman:小型帽子 X 只是一個普通的小寫字母 X (你可以從問題中復制角色並親自檢查)。還有一個小寫字母 X 必須與語音字符協調,因為它也被用作語音字符。它也應該與Cyrillic小寫字符具有相同的高度,因為您不希望單個西里爾字在拉丁文本中突出(反之亦然)。 - Wrzlprmft
在“XY問題”上為lol投票贊成:) - Andrew Morton


使用非拉丁字符,有點像拉丁字符,讓你成為垃圾郵件發送者,色情作者和誰知道什麼是他們想要他們的文本無法搜索,無法索引和可廢棄的解密者。 (“我從來沒有說過這是安全的!!我說這是sigma-alpha-integral-sign-epislon !!!不能起訴我!”)

如果你在那個俱樂部很舒服,那就去吧。


13
2017-12-28 20:04