核心结论直接说明,1 字节等于多少字符没有固定唯一数值,结果完全取决于使用的字符编码方案,在单字节编码体系里面,1 字节可以存放 1 个字符,最典型就是 ASCII 编码,英文字母数字英文符号全部占用 1 字节,在多字节编码体系里面,1 字节就无法完整表示 1 个汉字字符,比如 UTF8 编码里汉字一般占用 3 字节,GBK 编码里汉字占用 2 字节,这种场景下 1 字节只能是半个汉字字符,不能单独构成完整汉字,很多初学者容易混淆字节和字符这两个概念,字节是计算机存储容量单位,字符是人类可读的文字符号,二者不是等同概念,字节是底层存储单位,字符是上层语义单位,编码就是建立字符和字节之间映射关系的规则,理解这套映射,就能明白为什么同样是 1 字节,对应字符数量会随编码变化。
基础概念区分
字节 英文名称 Byte,是计算机存储基本单位,1 字节等于 8 个二进制位也就是 8bit
字符 是文字符号的统称,可以是英文字母 数字 标点 汉字 特殊文字符号
编码 把字符转换成计算机可以识别的二进制字节数据的转换规则
主流编码对照表
编码名称 单字符占用字节 1 字节可对应字符数量
ASCII 1 字节 1 个字符
GBK 英文 1 字节 汉字 2 字节 英文场景 1 字节对应 1 字符 汉字场景 1 字节仅为半个汉字
UTF8 英文 1 字节 汉字 3 字节 英文场景 1 字节对应 1 字符 汉字场景 1 字节不足完整汉字
UTF16 英文汉字大多 2 字节 1 字节无法单独表示完整字符
深度原理说明
计算机内部只识别二进制数据,所有文字最终都要转成字节存储,ASCII 编码最早只设计英文字符,编码空间刚好可以用 8 位也就是 1 字节全部覆盖,所以英文字符天然单字节,当加入中文这类庞大文字集,单字节最大只能表示 256 种状态,容量不够,所以就设计多字节编码,用多个字节组合来代表一个汉字字符,这就是多字节编码诞生的根本原因。
在网络传输文件存储数据库字段长度设计的时候,经常会遇到这个换算问题,比如字段定义长度是多少字节,如果存放中文,就不能按照 1 字节等于 1 字符来估算,否则很容易出现存储溢出,这也是工程上经常踩的知识点。
换算实操步骤
第一步 先确认当前场景使用的编码类型,是 ASCII GBK 还是 UTF8
第二步 判断待存储字符类型,是英文数字符号还是汉字
第三步 对照编码表,确认该类型字符单个占用字节数
第四步 计算 1 字节可以承载的字符数量,如果是单字节字符,结果就是 1 字符,如果是多字节汉字,1 字节不能组成完整汉字
第五步 工程应用时,按照字符总数量乘以单字符字节数,得到总共需要的字节容量
拓展补充
bit 也就是位,是比字节更小单位,8bit 组成 1 字节,字符和 bit 没有直接对应关系,依然要通过编码转换,不要把位字节字符三者混为一谈。
还有一点,部分编码存在 BOM 标记,BOM 本身也是额外占用字节,计算总字节的时候如果没有扣除,会让字符和字节统计出现偏差。
【相关 FAQ】
问题 1 1 字节多少字符在 ASCII 编码下是固定值吗
回答 1 1 字节多少字符在 ASCII 编码下是固定的,ASCII 属于单字节编码,1 字节就对应 1 个英文字符数字或者英文符号。
问题 2 1 字节多少字符在 UTF8 编码存放汉字的时候会发生什么情况
回答 2 1 字节多少字符在 UTF8 编码存放汉字的时候,单个汉字占用 3 字节,所以 1 字节不能构成完整汉字字符,只能是汉字编码的其中一部分。
问题 3 为什么不能直接认定 1 字节多少字符永远等于 1 个字符
回答 3 不能直接认定 1 字节多少字符永远等于 1 个字符,因为编码体系不同,汉字属于多字节字符,单个汉字需要多个字节组合,所以 1 字节不一定对应完整字符。
【免责申明】
本文内容仅用于计算机编码基础知识科普学习,实际项目计算请以对应编码规范和业务场景为准。


