字符串字节数统计(按编码方式)
测量输入的文本在 UTF-8、Shift_JIS、EUC-JP、UTF-16 和 JIS(ISO-2022-JP)编码下各占多少字节。适用于确认数据库字段长度限制或旧式表单输入上限等场景。
使用提示
- 在 UTF-8 编码下,半角英数字每个占 1 字节,而平假名、片假名、汉字等日文字符通常每个占 3 字节,因此即使字符数相同,英文和日文文本的字节数也会相差很大。
- 如果数据库字段(如 VARCHAR(255))采用的是旧式基于字节数的长度限制,包含日文的文本会比同样字符数的英文文本更快达到上限。
- 大多数表情符号(emoji)由两个代理对代码单元组成,在 UTF-8 和 UTF-16 中都占 4 字节,这也是社交媒体的字数统计有时会比预期更快达到上限的原因。
- 如果你已经知道字节数,想将其换算成 KB、MB 等单位,请使用姊妹工具「字节单位换算」——本工具负责的是从文本反向计算字节数。
常见问题
闲话 ― 社交媒体字数限制与字节数之间鲜为人知的关系
早期版本 MySQL 的 “utf8” 字符集存在一个令人意外的限制:它其实无法存储 U+10000 以上的 Unicode 补充字符,也就是许多表情符号。UTF-8 本身是支持每字符最多 4 字节的可变长编码,但 MySQL 的 “utf8” 出于历史原因最多只能处理 3 字节,导致插入包含表情符号的文本时经常报错。如今推荐迁移到能正确支持完整 4 字节范围的 “utf8mb4”,这是理解字符编码与字节数关系在实际应用中重要性的一个经典案例。
在 Twitter(现 X)曾实行 140 字符限制的年代,围绕语言间公平性曾有过长期争论:日语用户用 140 个字符就能表达相当完整的意思,而英语用户在同样限制下往往只能写 20 到 30 个单词。这是因为一个日文汉字所承载的信息量远超一个英文字母。Twitter 后来引入了一套加权计数机制,让日语等语言按“1 字符 = 1 计数”计算,而部分其他语言的某些字符按“2 字节 = 1 计数”计算,以此在不同语言之间取得平衡。
手机短信也存在类似的现象。标准 GSM 编码的短信每条最多允许 160 个字符,但只要其中包含哪怕一个不在 7 位 GSM 字符集范围内的字符——比如表情符号或日文字符——编码方式就会切换为 UCS-2(大致相当于 UTF-16),上限也会骤降到仅 70 个字符。“只用了一个日文字符,可发送的字数就骤减一半以上”,正是本工具所要测量的字符编码与字节数关系的一个生动例证。