字符串长度统计

📏 String Length Counter

Count characters, bytes, lines, words and spaces.

📐 工作原理与说明
字符数按 Unicode 码点数组的长度统计;字节数按 UTF-8 编码后的字节数统计;行数在文本为空时取 0,否则按换行(兼容回车换行、回车、换行)切分后的行数;词数在去空白后为空时取 0,否则按空白切分后的段数;空格数按空白字符匹配计数;中文字符按中日韩统一表意文字区间匹配计数;标点按中日韩标点、全角区、通用标点区与 ASCII 标点区间匹配计数。平均字节数 = 字节数 ÷ 字符数(字符数为 0 时取 0),保留 2 位小数;数值展示时按中文地区千分位格式输出
统计文本的字符数、字节数、词数与行数,是内容与接口限长校验的常用工具。
  • 字符 vs 码元:JS 的 .length 计的是 UTF-16 码元,emoji 与部分生僻汉字占 2 个码元。
  • 准确计数:用 [...str].length 或 Intl.Segmenter 按字素簇切分更符合直觉。
  • 字节数:取决于编码,UTF-8 下英文 1 字节、常用中文 3 字节、emoji 常 4 字节。
  • 词数:英文按空白与标点切分;中文需分词,常用字数与字符数近似。

Formula & Standard References

Item Formula / Note Source / Standard
Units and points JS length counts UTF-16 code units, surrogates count twice RFC 2781 / ECMA-262
Grapheme clusters user-perceived characters should be counted as clusters Unicode UAX 29
Byte length CJK characters take 3 UTF-8 bytes; ASCII takes 1 RFC 3629
📌 统计规则

📚 深度解析:字符串长度统计

💡 常见使用场景

统计
"Hello 世界":字符数 8(H e l l o 空格 世 界),UTF-8 字节数 11(中文各 3 字节)。

❓ 常见问题(FAQ)

字符数与字节数为何不同?
中文等多字节字符在 UTF-8 占多字节,数据库常按字节限制。
为什么 emoji 长度算出来是 2?
因为 JS 字符串的 .length 统计的是 UTF-16 码元,而 emoji 大多位于辅助平面、需两个码元(代理对)表示。要得到「人眼看到的字符数」,应遍历 [...str] 或用 Intl.Segmenter 按字素簇计数;统计传输体积则要看 UTF-8 字节数。