文章
單詞、字元與大小寫:文字計數究竟是怎麼算的
統計文字聽起來像是電腦絕不會算錯的工作,可兩個工具卻常常對同一段文字給出不同的數字,一個表情符號能讓簡訊一下子只剩70個字元的額度,X上所謂的"280字元"也不是表面看上去那個意思。在按字數限制寫作、替變數改名或填充設計稿這些日常瑣事背後,藏著幾條值得了解的規則。本文就以本站的幾個小型文字工具為實例,逐一梳理這些規則。
什麼算作一個詞
大多數計數工具,包括本站這一個,都採用打字員式的定義:詞就是被空格或換行分隔開的一串可見字元。光是這一條規則,就能解釋大部分分歧。數字、URL和電子郵件地址都各自算作一個詞。這套約定在沒有空格分隔的書面語言裡完全行不通:中文書寫不靠空白來分詞,所以「字數統計」這個概念本身沒有太大意義,更該看的是字元數。這一點對中文讀者來說尤其貼切:與其爭論一段中文文字裡「有幾個詞」,不如直接數字元數,這才是實際可用的計量單位。閱讀時長的估算又疊加了另一層約定:本站的字數統計工具用每分鐘200詞這個成年人默讀的常見平均速度去除以詞數,所以得出的結果只是一個用於規劃的參考數字,而不是一個承諾。
一個字元不一定是一個符號
字元計數更加模糊,因為Unicode文字本身是分層的。你感知為「一個字元」的東西(字位,grapheme)在底層可能由好幾個碼點組成,而每個碼點又佔用JavaScript的length屬性所計算的一個或兩個16位元單元。咧嘴笑臉表情符號在視覺上是一個字位,卻佔了兩個這樣的單元,於是一個粗糙的計數器會回報2。由多個人物表情組合而成的家庭表情符號,是一個字位、五個碼點、八個單元。就連普通文字也有這個問題:「café」這個詞裡的é,既可以作為一個碼點儲存,也可以拆成e加一個組合重音符號來儲存,螢幕上看起來一模一樣,計數結果卻不同。這就是兩個計數器結果不一致的原因:它們衡量的是不同的層。把碼點歸併為使用者感知字元的規則,由Unicode文字分段標準(UAX #29)統一規定,規範實作的計數器都會遵循它。

真正要為之計數的那些限制
字元限制才是計數真正牽涉到金錢的地方。一則簡訊在緊湊的GSM-7字母表下可容納160個字元,但只要出現一個不在這個字母表裡的字元(例如表情符號,或字母表裡沒有的字母),整則訊息就會切換到UCS-2編碼,上限隨之降到70;超長訊息會被拆成每段153或67個字元的分段,分別計費。X允許每則貼文280個字元,但對字元做了加權:無論實際長度多少,每個URL一律算23個字元,而大多數表情符號和中日韓(CJK)文字算2個字元。搜尋摘要則採用軟性限制:Google是按像素寬度截斷標題和描述的,所以大家熟悉的「標題60字元、描述155字元」只是一種便於操作的經驗值,並非硬性保證。當限制真正重要時,就按對應平台使用的那套規則去計數,並留出餘裕。
大小寫是一種慣例,每種風格都有自己的用武之地
改變大小寫聽起來微不足道,直到你遇上疊加在它之上的種種慣例。這裡談的其實是拉丁字母文字的問題,例如程式碼識別字或英文標題,中文本身並沒有大小寫之分。在這類文字中,美式標題偏愛Title Case(每個實詞字首大寫),多數歐洲文風指南則更偏愛sentence case(僅句首字母大寫)。程式碼裡也有自己的一套家族:JavaScript和Java的變數用camelCase,類別和元件名稱用PascalCase,Python和資料庫裡用snake_case,常數用SCREAMING_SNAKE_CASE,CSS類別名稱、檔名和URL slug用kebab-case,用小寫可以避開那個經典陷阱,也就是兩個連結僅因大小寫不同而被當成不同位址。手動轉換幾個識別字沒什麼問題;可一旦要轉換八十個的清單,手誤幾乎是必然的。大小寫轉換工具會機械式地套用這套轉換規則,包括如何處理縮寫詞、如何處理既有分隔符號這些瑣碎細節。

填充文字,以及手機怎麼也打不開的檔案
還有兩件小事可以補齊這份清單。評估版面時通常要用佔位文字,因為真實的句子會把注意力拉到內容本身上;lorem ipsum之所以好用,恰恰是因為它看起來幾乎能讀懂,卻又不是真正可讀的拉丁文。本站的產生器可以按段落、句子或單詞來產生佔位文字,這樣設計稿就能填充到貼近實際長度的篇幅,而不是反覆貼上同一小段文字。而當有人傳來一個手機怎麼也打不開的.md、.json、.csv或.log檔案時,以瀏覽器為基礎的文字檢視器可以直接把內容顯示出來,不需要安裝編輯器,也不用把檔案轉發到什麼轉換網站上。以上這一切,包括計數在內,全部在你的瀏覽器裡完成:文字從不離開你的裝置,而當你要統計的是一份草稿、一份合約,或是一份滿是內部路徑的日誌時,這一點比平時更重要。
本文涉及的工具
常見問題
一頁能放下多少個詞?
出版業的經驗值是:單倍行距的一頁大約500詞,雙倍行距的一頁大約250詞,前提是在A4或Letter紙上使用標準的12級字體。實際文件只要字體、邊界或標題樣式一變,就會偏離這些數字,這也是為什麼作業和投稿越來越常直接規定詞數,而不是頁數。如果文字已經寫好了,直接數出來就好,不必依賴估算;頁數換算只在文字還不存在的階段才有參考價值。
lorem ipsum到底是什麼意思?
它是被打亂的拉丁文,不是無意義的亂碼。這段標準文字節錄並重新拼接自西塞羅西元前45年的哲學著作《De finibus bonorum et malorum》(論善惡之極);其中「dolorem ipsum」這個片段的意思是「痛苦本身」。打亂正是關鍵所在:文字看起來像自然語言,詞長和句子節奏都很自然,卻讓人讀不進去,於是觀看者評判的是版面而不是文案內容。它在現代的流行,通常被歸功於1960年代的Letraset轉印字貼和1980年代的桌面排版軟體。
為什麼平台統計出的字元數比我用的計數器少?
因為平台是按自己的一套權重來計數的。X的上限是280,但每個URL一律按23個字元計費,大多數表情符號和中日韓(CJK)文字各算2個字元。簡訊閘道只要一出現GSM-7字母表容納不了的字元,就會把整則訊息從160字元的GSM-7切換到70字元的UCS-2模式。而且任何平台都可能是按碼元而不是按字位計數的,一個家庭表情符號就可能吃掉限額裡的8個字元。當按鈕上顯示的數字和你自己的計數器對不上時,以平台的規則為準:傳送前多留些餘裕,或者直接用平台自帶的計數器核對一下。