字串位元組數統計(按編碼方式)
測量輸入的文本在 UTF-8、Shift_JIS、EUC-JP、UTF-16 和 JIS(ISO-2022-JP)編碼下各佔多少位元組。適用於確認資料庫欄位長度限制或舊式表單輸入上限等場景。
使用提示
- 在 UTF-8 編碼下,半形英數字每個佔 1 位元組,而平假名、片假名、漢字等日文字元通常每個佔 3 位元組,因此即使字元數相同,英文和日文文本的位元組數也會相差很大。
- 如果資料庫欄位(如 VARCHAR(255))採用的是舊式基於位元組數的長度限制,包含日文的文本會比同樣字元數的英文文本更快達到上限。
- 大多數表情符號(emoji)由兩個代理對程式碼單元組成,在 UTF-8 和 UTF-16 中都佔 4 位元組,這也是社交媒體的字數統計有時會比預期更快達到上限的原因。
- 如果你已經知道位元組數,想將其換算成 KB、MB 等單位,請使用姊妹工具「位元組單位換算」——本工具負責的是從文本反向計算位元組數。
常見問題
閒話 ― 社交媒體字數限制與位元組數之間鮮為人知的關係
早期版本 MySQL 的 “utf8” 字元集存在一個令人意外的限制:它其實無法儲存 U+10000 以上的 Unicode 補充字元,也就是許多表情符號。UTF-8 本身是支援每字元最多 4 位元組的可變長編碼,但 MySQL 的 “utf8” 出於歷史原因最多隻能處理 3 位元組,導致插入包含表情符號的文本時經常報錯。如今推薦遷移到能正確支援完整 4 位元組範圍的 “utf8mb4”,這是理解字元編碼與位元組數關係在實際應用中重要性的一個經典案例。
在 Twitter(現 X)曾實行 140 字元限制的年代,圍繞語言間公平性曾有過長期爭論:日語使用者用 140 個字元就能表達相當完整的意思,而英語使用者在同樣限制下往往只能寫 20 到 30 個單詞。這是因為一個日文漢字所承載的資訊量遠超一個英文字母。Twitter 後來引入了一套加權計數機制,讓日語等語言按“1 字元 = 1 計數”計算,而部分其他語言的某些字元按“2 位元組 = 1 計數”計算,以此在不同語言之間取得平衡。
手機簡訊也存在類似的現象。標準 GSM 編碼的簡訊每條最多允許 160 個字元,但只要其中包含哪怕一個不在 7 位 GSM 字元集範圍內的字元——比如表情符號或日文字元——編碼方式就會切換為 UCS-2(大致相當於 UTF-16),上限也會驟降到僅 70 個字元。“只用了一個日文字元,可傳送的字數就驟減一半以上”,正是本工具所要測量的字元編碼與位元組數關係的一個生動例證。