字符集
计算机只能识别二进制,要处理文字,就需要对字符进行编码,于是就有各种不同编码方式的字符集
常见的字符集有:ASCII,GB2312,BIG5,GB18030,Unicode
ASCII
American Standard Code for Information Interchange,美国信息互换标准编码
等同于国际标准ISO-646
7位编码的字符集只能支持128个字符
为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符
GB2312
《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施
每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节”),第二个字节称为“低位字节”(也称“位字节”)
收录的汉字已经覆盖中国大陆99.75%的使用频率
对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现
BIG5
又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五家软件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码
Big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”
GBK
《汉字内码扩展规范(GBK)》1.0版,由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订
只为“技术规范指导性文件”,不属于国家标准
根据微软资料,GBK是对GB2312-80的扩展
GB18030
全称:GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准
采用单字节、双字节和四字节三种方式对字符编码
Unicode
全称:Universal Multiple-Octet Coded Character Set 通用多八位编码字符集
它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求
Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案,UTF是 Unicode Tranformation Format
- UTF-32:用4字节的数字来表达每个字母、符号,或者表意文字,就空间而言,是非常没有效率的
- UTF-16:尽管有Unicode字符非常多,但是实际上大多数人不会用到超过前65535个以外的字符,因此有了UTF-16编码,每个字符只需要2个字节来存储
- UTF-8:针对Unicode的可变长度字符编码,其编码中的第一个字节仍与ASCII兼容,ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节,辅助平面字符则使用4字节
总结
最早的简体中文编码字符集为GB2312(覆盖了99%的日常使用汉字)
后来出现了GBK,GBK加入了对繁体字的支持,GBK兼容GB2312
再后来又发布了GB18030编码,解决了中文、日文、朝鲜语等的编码问题,GB18030兼容GBK
不同的字符集对于字符的映射不尽相同,所以在编程的时候应该使用统一的字符集,这样可以避免乱码
编程时尽可能使用Unicode字符集(常用UTF-8),这样可以保证代码或注释在其他语言的计算机上显示正常
一些计算机使用的默认字符集可能不支持中文,用默认字符集解析中文字符可能导致乱码
而不同语言的字符在Unicode字符集中都有唯一的编码与之对应,可以避免乱码
参考资料
Java零基础到高级MySQL数据库
百度百科-字符集
字符集和字符编码(Charset & Encoding) - 吴秦
关于字符集和字符编码那些事
中文编码 1:常见中文编码格式
详细解释为什么写程序要用 Unicode 字符集