01 / 30 秒回忆
“字符数”不是只有一个定义。JavaScript 字符串按 UTF-16 保存,用户感知的字符可能由多个 code point 组成,而 UTF-8 字节数又取决于编码后的字节长度。
TOOLS / 嵌入式
同时统计 Unicode 码点、UTF-16 code unit、UTF-8 字节和换行数量。
快速理解
输入
输出
知识回忆
概念、关系和工程边界。
01 / 30 秒回忆
“字符数”不是只有一个定义。JavaScript 字符串按 UTF-16 保存,用户感知的字符可能由多个 code point 组成,而 UTF-8 字节数又取决于编码后的字节长度。
02 / 核心关系
码点数用 Array.from 统计,UTF-16 code unit 是 text.length,UTF-8 字节数由 TextEncoder 得到;行数按 CRLF、CR 或 LF 分行,单词按空白分段。
03 / 使用判断
规划协议长度、Flash/EEPROM 空间或 UI 截断时,先确定对方限制的是码点、UTF-16 单元还是 UTF-8 byte;中文、emoji 和换行是最容易暴露差异的样例。
把一个 emoji、一个汉字和一个英文字符都默认当作一个 byte,或把 UTF-16 code unit 直接称作用户可见字符。空文本的行数和单词数也不应凭感觉补成 1。
统计结果不等同于字素簇数量,也不代表字体渲染宽度;数据库字段、串口帧和显示控件应分别遵循各自的长度定义。