SoupCalc

字串長度計算器——Unicode 字元與 UTF-8 位元組

本工具計算什麼

本計算器報告基於 Unicode 碼點的字元導向計數,以及基於 UTF-8 位元組的儲存導向計數。在內部,經驗證的輔助工具也會區分 UTF-16 碼元,這解釋了為何對於某些表情符號與補充字元,JavaScript 字串的原生長度可能與可見結果不同。

「字元」在計算中有多種含義。碼點計數比計算 UTF-16 碼元更具 Unicode 意識,但它仍不總是使用者感知的字形叢集數量。

輸入欄位

輸入或貼上任何文字,包括空格、換行、表情符號、組合標記及非拉丁書寫系統。計算在瀏覽器中進行,無需將文字發送至長度服務。

當位元組限制至關重要時,請保留確切的換行符號。Windows 的 CRLF 換行使用兩個碼點與兩個 UTF-8 位元組,而 LF 換行使用一個。Unicode 正規化也可以在未改變外觀文字的情況下改變碼點與位元組計數。

方法與公式

碼點計數會按 Unicode 碼點迭代字串,而非以原始 UTF-16 單元建立索引。UTF-16 計數為語言執行階段的碼元長度。位元組計數將字串編碼為 UTF-8 並計算產生的八位元組。

基本 ASCII 字元使用一個 UTF-16 單元與一個 UTF-8 位元組。許多帶重音符號的字元使用一個碼點但兩個 UTF-8 位元組。補充表情符號通常使用一個碼點、兩個 UTF-16 碼元與四個 UTF-8 位元組。

以零寬度連接符連接的表情符號序列等字形,可能包含多個碼點,但看起來像一個符號。本工具不會套用字形分割。

計算範例

輸入 A😀é

  • Unicode 碼點:A😀é,總計 3
  • UTF-16 碼元:A 為 1,😀 為 2,é 為 1,總計 4
  • UTF-8 位元組:A 為 1,😀 為 4,é 為 2,總計 7

可見的計算器報告 3 個字元與 7 個位元組。記錄的 UTF-16 值 4 解釋了為何簡單的 JavaScript .length 計數會不一致。

如何解讀結果

當驗證明確以碼點定義的通訊協定或資料規則時,使用碼點。對於以編碼位元組定義的酬載、資料庫或 API 限制,使用 UTF-8 位元組。兩者皆不應替代以字形叢集、顯示寬度、SMS 區段或字型字符定義的限制。

在強制執行產品限制時,請記錄所使用的單位與正規化形式。使用者不應僅因介面顯示「字元」而後端拒絕位元組就遺失文字。

準確性與限制

位元組計數專門使用 UTF-8;UTF-16、UTF-32、舊式編碼、壓縮、跳脫、JSON 語法與傳輸框架具有不同的大小。本工具不會正規化文字或計數字形叢集、單詞、行、欄、字符或渲染寬度。

視覺上相同的字串可能具有不同的編碼——例如,預先組合的帶重音字母與基礎字母加上組合標記。安全敏感的識別碼需要超越僅長度的記錄化 Unicode 政策。

資料來源

編輯記錄

作者:SoupCalc 編輯團隊

最後審閱日期:2026年8月14日

審閱範圍:碼點迭代、UTF-16 代理對行為、UTF-8 編碼、字形限制、標準參考文獻,以及 A😀é 的計數 3、4 與 7,均已核對。