4. GB2312字符集,以及字符编码 GB2312GB国标中华人民共和国国家标准2312没有特别含义只是个编号第2312号国家标准百度百科https://baike.baidu.com/item/信息交换用汉字编码字符集/8074272参考资料https://qqe2.com/doc/gb2312https://www.qqxiuzi.cn/zh/hanzi-gb2312-bianma.phphttp://tools.jb51.net/table/gb23121. 字符集共有7573个字符。128个ASCII字符682个非ASCII、非汉字图形 的字符6763个简体汉字3755个一级汉字3008个二级汉字一级汉字就是常用汉字二级不常用。2. 字符编号有两种编号方式128个ASCII字符的编号方式还是从0-127其余的非ASCII字符使用【区位码】的方式编号。94个区每个区94位可以表示8836个字符。空余1381个区位。【区】和【位】都是从1开始计数。3.字符编码两种编码方式128个ASCII字符还是使用单字节编码8位首位固定为0。其余字符采用双字节编码。编码方式为【区号 0xa0】 【位号 0xa0】区、位各占一字节。首位固定为1。0xa0就是十进制1600b10100000例如汉字【啊】在第16区第1位汉字【啊】区位区号和位号161区号和位号的二进制0b000100000b000000010xA0 的二进制0b101000000b10100000相加后的结果0b101100000b10100001相加后的结果 (hex)0xB00xA1所以汉字【啊】在GB2312中的编码就是B0A14. 使用编辑器查看4.1 汉字【啊】新建一个文本文件输入汉字【啊】注意右下角的编码格式为GB2312查看十六进制数据可以看到汉字【啊】在GB2312中是双字节编码B0A14.2 大写英文字母【ABC】他们是ASCII字符集中的字符GB2312完全兼容ASCII在GB2312中是单字节编码4.3 换行符windows环境敲回车键可以看到windows环境下的换行符是两个字节0D0A4.4 全角英文字母【ABC】注意标点符号、数字符号和英文字母都有全角和半角的全角A的编码A3C1全角B的编码A3C2全角C的编码A3C3我们手动输入这些编码保存后切回text editor查看可以看到全角字母和半角字母其实是完全不同的字符和编码虽然表示的内容一样。4.5 乱码不符合GB2312的编码规则什么是不符合GB2312的编码规则呢如果是单字节那么必须是0开头 比如0xa00b10100000 就不符合如果是双字节那么必须大于0xa0比如 0x80 0x80就不符合手动输入这些十六进制数据保存后转回text editor查看可以看到展示为乱码注意GB2312 字符集中不包含欧元符号€。€是在 GB2312 发布多年后才出现的货币符号1999年欧元正式诞生而 GB2312 是1980年制定的因此它被收录在后续的扩展标准中GBK包含了€编码为0xA2E3GB18030同样包含€编码也是0xA2E35. 疑问5.1 GB2312兼容ASCII吗GB2312 完全兼容 ASCII美国信息交换标准代码。具体体现在单字节与 ASCII 一致GB2312 中0x00 到 0x7F 的编码与 ASCII 完全一致用来表示英文字母、数字、标点和控制字符。用最高位区分它采用变长编码最高位为0就是单字节的 ASCII 字符最高位为1则表示双字节的其他非ASCII字符。5.2 为什么区位码要加【0xa0】而不是加【0x80】如果只加0x80即0b10000000也可以满足最高位为1与ASCII的单字节编码严格区分开来。原因可能是理论上GB2312的最后一个字符是第94区第94位94加上0xa0后为0b111111100xfe差1就能满0b11111111所以原因可能是尽可能不浪费字节空间。deepseek的解释https://chat.deepseek.com/share/fusgwysbevvn2i75s1当时设计GB2312的专家可能有他们自己其他方面的考虑。

本月热点