这个工具是什么
Character Counter 专注编码层面的计数。它将 Unicode Code Points、可见字符簇、UTF-16 Code Units 和 UTF-8 Bytes 分开显示,避免把 JavaScript 的 string.length 误认为所有情况下的字符数。
如何使用
- 输入文字、emoji 或组合重音字符。
- 查看码点数、去空白字符数和 UTF-8 字节数。
- 比较可见字符簇与 UTF-16 代码单元;浏览器不支持字符簇分割时会明确提示。
- 复制原文或载入示例,检查不同表示方式的差别。
使用示例
- 😀:1 个 Unicode 码点、2 个 UTF-16 代码单元、4 个 UTF-8 字节。
- 👨👩👧👦:7 个 Unicode 码点,支持 grapheme 分割时为 1 个可见字符簇。
- e 加组合重音与预组合 é 通常看起来相同,但前者有 2 个码点,后者有 1 个。
统计规则
字符与 Unicode Code Points 按 Array.from 等价的码点遍历统计;UTF-16 Code Units 使用原始字符串长度;UTF-8 Bytes 使用 TextEncoder。可见字符簇优先使用 Intl.Segmenter 的 grapheme 模式。输入不做 Unicode 规范化,因此组合字符的不同编码会保留。原始换行字符参与编码计数;末尾换行会产生末尾空行。单份输入最多 2,000,000 个 UTF-16 代码单元。
常见用途
- 核对接口、文件或存储字段的 UTF-8 大小。
- 排查 emoji 引起的长度差异。
- 理解字形、码点和编码单位之间的关系。
隐私说明
文本、文件读取、转换和预览均在当前浏览器本地完成,不上传输入,不使用后台、数据库、在线 API 或第三方 CDN,也不会自动保存您的内容。复制和下载由浏览器本地完成。
FAQ
emoji 算几个字符?
简单 emoji 可能是一个码点,而家庭、国旗或肤色组合可能包含多个码点。可见字符簇计数更接近用户看到的数量。
为什么 UTF-16 长度可能大于字符数?
超出基本多文种平面的码点使用一对 UTF-16 代理项,因此一个码点可能占两个代码单元。
UTF-8 Bytes 是文件大小吗?
它表示当前文本编码为 UTF-8 后的字节数,不包含额外文件头、BOM 或文件系统元数据。
空格会计入吗?
普通字符数包含空白;“去空白字符数”排除空格、Tab、换行及其他 Unicode 空白。
没有 Intl.Segmenter 怎么办?
码点、UTF-16 和 UTF-8 仍可计算;可见字符簇区域会说明无法提供可靠的字符簇计数。