统计字符数
含空格和不含空格的字符数,外加您的数据库和短信网关实际计量的字节数。在这里,表情符号算一个字符,因为它本来就是一个字符。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
0
字符
按人眼所见计数
0
不含空格
不计空白字符
0
字数
支持任何语言
0
UTF-8字节
数据库的计法
- 行数与编辑器的行号一致
- 0
- 句数不会被“Dr.”或“etc.”断开
- 0
- 段落以空行分隔的文本块
- 0
- 码位正则表达式中“.”匹配的单位
- 0
- UTF-16单元JavaScript中string.length返回的值
- 0
- UTF-8字节VARCHAR限制和HTTP头部的计量方式
- 0
- 阅读时间默读,每分钟238字
- —
- 朗读时间朗读,每分钟150字
- —
- 最长的词按字符计,而非字节
- —
- 平均词长粗略的可读性参考
- —
开始输入,各项数据就会自动填入。试试输入一个表情符号,或一句中文——两者都按人的计数方式统计,而大多数统计工具在这一点上都会出错。
使用方法
粘贴或输入
统计结果实时更新。不存储任何内容。
选择您需要的计数
字符数、不含空格的字符数、码位或UTF-8字节数——每一项都会显示,并注明哪里会用到它。
留意字数限制
SEO标题、meta描述、短信分段和255字节的字段,都会根据您写的内容实时对照。
四个数字,因为“字符”有四种含义
以“一家人”的表情符号,或者带肤色的点赞表情为例。人看到的是一个字符。它由多个码位通过不可见的连接符组合而成,所以正则表达式看到的是七个。JavaScript以16位单元存储文本,基本范围之外的字符要占两个单元,所以它报告的是十一个。编码为UTF-8存进数据库字段时,它占二十五个字节。这些数字没有一个是错的,也没有一个是唯一答案——哪个正确,完全取决于是什么在设限。
所以实际要问的是:限制是谁定的。数据库字段声明为VARCHAR时,大多数数据库引擎按字节计,这就是为什么一个能接受255个英文字符的字段,能接受的日文字符要少得多。短信在它自己的七位字母表中是160个字符,只要有一个字符超出这个字母表,每条就降到70个——一个弯引号或一个表情符号就能把一条短信变成三条。JavaScript写的表单校验几乎总是按UTF-16单元计,这就是为什么一个标明280个字符的输入框,可能会拒绝一段看起来更短、但满是表情符号的文字。
统计读者看到的字符数最难,这里使用浏览器自带的文本分段功能来完成——正是这套机制决定了按下左方向键时光标会移到哪里。对于任何人眼感知的内容,这是“一个字符”的正确定义,它也能处理那些让简单统计出错的情况:用基本字母加组合符号写成的带重音字母算一个,印地文和泰文的字符簇也按这些文字的读者的方式计数。
对于普通英文文章,四个数字完全相同,所以这个问题一直不显眼,直到它出问题为止。四者在表情符号、带重音和组合字符、非拉丁文字以及数学符号上会出现分歧——而恰恰是这些输入,会在数据库建好三个月后导致某个字段被悄无声息地截断。
如果您需要的是别的
在代码中,请使用能统计您所需内容的函数,而不是默认的长度。JavaScript中的Intl.Segmenter统计读者看到的字符;Python 3的字符串按码位计数,len(s.encode("utf-8"))则统计字节数;PHP有mb_strlen和strlen,正是为了区分这一点。大多数语言的默认值只是该语言觉得方便的那一种,而这很少是您的限制所指的那一种。
当数据库字段是限制所在时,根本的解决办法在上游。在MySQL中把字段声明为utf8mb4,或在PostgreSQL中使用text,就能消除一整类截断问题——MySQL中较老的utf8出了名地每个字符只有三个字节,根本存不下表情符号。在表单上小心计数,只是为一个本该换种方式声明的字段打补丁。
常见问题
我的文本会被存储吗?
不会。不存储任何内容,也不发出任何请求,断开网络后照样能用。对文本来说,这一点比看上去更重要:人们粘贴到在线统计工具里的,往往是未发表的文章、法律文书草稿、学生作业和内部文件。
为什么会有四种不同的字符数?
因为“字符”有四种不同的含义,而大多数工具只知道其中一种。您眼中的一个字符是一个字素簇——“é”、“🎉”甚至“👨👩👧👦”都各算一个。JavaScript的string.length报告的是UTF-16代码单元,那个“一家人”表情是11。正则表达式匹配的是码位,它是7。而数据库字段或HTTP头部计量的是UTF-8字节,它是25。这里四个数字都会显示,因为您需要哪一个,取决于是谁在设限。
一个表情符号算几个字符?
在这里算一个——因为对阅读它的人来说它就是一个,现代平台的字数限制也是这样计算的。在别处,它可能是2、7或11:“👨👩👧👦”是四个人通过三个不可见的连接字符组合而成,所以它是7个码位、11个JavaScript的string.length所统计的单元。如果某个表单嫌您的文字太长,而它看起来明明够短,通常就是这个原因,本页的字节数会告诉您真实的大小。
为什么我200个字符的文字存不进255个字符的数据库字段?
因为这个字段几乎可以肯定限制的是字节,而不是字符。在UTF-8中,普通英文字母每个占一个字节,带重音的字母占两个,中文、日文、阿拉伯文和表情符号占三到四个。所以200个日文字符就是600个字节。这里显示字节数正是出于这个原因——它才是数据库实际检查的数字。
为什么一个表情符号会让短信上限从160降到70?
因为短信使用一种紧凑的7位字母表,可以容纳160个字符——而这个字母表里没有表情符号、没有弯引号,几乎也没有带重音的字母。只要有一个字符超出它,整条短信就会切换为Unicode编码,上限随之降到70。从Word粘贴过来的一个弯撇号,和一个表情符号一样容易触发这种情况。一条短短的信息就是这样被按三条计费的,而本页会在发生的那一刻提醒您。
会统计空格吗?
两个数字同时显示,所以您不必二选一。换行符和制表符也算作空白字符。
小贴士: 给出四个数字,是因为“字符”有四种含义,您需要哪一种,取决于是谁在设限。数据库的VARCHAR按UTF-8字节计,正则表达式按码位计,JavaScript按UTF-16单元计,而人按眼睛看到的计。四者在表情符号上分歧最大。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。