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 字节。两者均不应替代以字形簇、显示宽度、短信段数或字体字形定义的限制。

在强制执行产品限制时,记录单位和归一化形式。用户不应仅仅因为界面说"字符"而后端拒绝字节就丢失文本。

准确性及局限性

字节计数明确使用 UTF-8;UTF-16、UTF-32、传统编码、压缩、转义、JSON 语法和传输帧具有不同大小。该工具不归一化文本,也不统计字形簇、单词、行、列、字形或渲染宽度。

视觉上相同的字符串可能具有不同编码——例如,预组合重音字母与基字母加组合标记。安全敏感的标识符需要超出长度之外的文档化 Unicode 策略。

参考来源

编辑记录

作者:SoupCalc 编辑团队

最后审核日期:2026年8月14日

审核范围:码点迭代、UTF-16 代理对行为、UTF-8 编码、字形限制、标准参考以及 A😀é 的 3、4、7 计数均已核对。