计算机编码是计算机处理、存储和传输文本信息的规则,其核心是将人类可理解的字符(如文字、符号、数字)转换为计算机能识别的二进制(0和1)。不同场景和语言需要不同的编码方案,以下是常见的编码方式及特点:
一、ASCII 编码(基础编码)
- 全称:American Standard Code for Information Interchange(美国信息交换标准代码)。
- 适用范围:主要用于英文及西欧语言,包含大小写字母、数字、标点符号和控制字符(如换行、回车)。
- 编码规则:
- 用 1个字节(8位) 表示,实际只使用前7位(0-127),第8位为0(用于校验)。
- 共定义了128个字符,例如:
A
对应 65(二进制01000001
),0
对应 48。
- 局限性:无法表示中文、日文等非拉丁字符。
二、GB2312 与 GBK(中文编码)
为解决中文显示问题,中国制定了以下编码:
GB2312(1980年)
- 收录 6763个简体汉字、682个符号,覆盖常用中文。
- 编码规则:
- 中文用 2个字节 表示,每个字节的最高位为1(区别于ASCII的0)。
- 兼容ASCII:英文仍用1个字节(同ASCII),中文用2个字节。
GBK(1995年,扩展GB2312)
- 在GB2312基础上扩展,收录 21003个汉字(含繁体),支持更多生僻字。
- 编码规则:兼容GB2312,同样用2个字节表示中文,且与GB2312编码不冲突。
三、Unicode 与 UTF-8(全球通用编码)
由于各国编码不兼容(如中文GBK和日文Shift_JIS冲突), Unicode 应运而生:
Unicode(统一码)
- 目标:为全球所有字符(无论语言)分配唯一的二进制编码,实现“一码通”。
- 编码范围:从0到0x10FFFF,可表示超过100万个字符,包含中文、日文、韩文、 emoji 等。
- 局限性:直接存储Unicode会浪费空间(如英文也需2-4字节),因此需要“传输和存储方案”。
UTF-8(Unicode的实现方式)
- 特点:可变长度编码,根据字符不同用1-4字节表示,兼顾节省空间和兼容性。
- 编码规则:
- 英文/数字:1字节(与ASCII完全兼容),例如
A
仍为 65。 - 中文:通常用3字节表示(如“中”对应
0xE4B8AD
)。 - 生僻字或 emoji:可能用4字节。
- 英文/数字:1字节(与ASCII完全兼容),例如
- 优势:是目前互联网、操作系统(如Linux、macOS)和编程语言的主流编码,避免乱码问题。
四、其他常见编码
- ISO-8859系列:针对欧洲语言的编码(如ISO-8859-1支持西欧语言),但不支持中文。
- UTF-16/UTF-32:Unicode的其他实现方式,UTF-16用2或4字节,UTF-32固定4字节,空间占用较大,多用于Windows系统内部或Java等语言。
- BIG5:中国台湾、香港地区使用的繁体中文编码,与GBK不兼容。
五、编码相关问题
- 乱码原因:字符存储时用A编码,读取时误用B编码(如GBK文本用UTF-8打开)。
- 解决方法:统一编码为UTF-8(兼容性最好),在文件、网页、数据库中明确指定编码格式。
例如,HTML中需在 <head>
声明编码:<meta charset="UTF-8">
,确保浏览器正确解析。
理解编码的核心是:字符→二进制的映射规则,不同编码的差异在于映射范围和存储效率。UTF-8因平衡了兼容性和空间,成为当前最广泛的编码标准。