ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

“深度学习“汉字国标码GB2312

2021-07-13 13:31:04  阅读:260  来源: 互联网

标签:字节 int GB2312 汉字 国标码 static GB public


       GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符.
GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%
对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,需要使用GBK及GB18030汉字编码


一.规则

  1. 每个汉字有个二进制编码,叫汉字国标码. 
  2. GB2312-80 GB2312将代码表分为94个区,对应第一字节;每个区94个位,对应第二字节.
  3. 区位码:十进制区码+十进制位码 
  4. 国际码(GB):(十六进制区码+20H)+(十六进制位码+20H)
  5. 机内码:将国标码的每个字节都加上128,即将两个字节的最高位由0改1,其余7位不变
  6. 16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序

 二.JAVA代码

public final static int DRI16 = 16;
	public final static int DRI55 = 55;
	public final static int DRI56 = 56;
	public final static int DRI87 = 87;
	public final static int MIN_POS = 1;
	public final static int MAX_POS = 94;

	public static void main(String[] args) throws UnsupportedEncodingException {
		/** 定义字节数组,长度为2,分别用于存放高位字节和地位字节 */
		int index = 1;
		byte[] gbBytes = new byte[2];
		for (int d = DRI16; d <= DRI55; d++) {
			/** 第一个字节(高位字节)+20H即十进制32 */
			int high_pos = d + 32;
			/** 第一个字节(高位字节)+128 */
			high_pos += 128;
			/** 给第一个字节(高位字节)赋值 */
			gbBytes[0] = (byte) high_pos;
			for (int p = MIN_POS; p <= MAX_POS; p++) {
				/** 第二个字节(低位字节)+20H即十进制32 */
				int low_pos = p + 32;
				/** 第二个字节(地位字节)+128 */
				low_pos += 128;
				/** 第二个字节(地位字节)赋值 */
				gbBytes[1] = (byte) low_pos;
				/** 构造汉字字符并输出,下面就是见证奇迹的时刻 */
				String ccStr = new String(gbBytes, "GB2312");
				if (!(d == DRI55 && p >= 90)) {
					System.out.print("第" + (index++) + "个汉字是:");
					System.out.println(ccStr);
				}
			}
		}
		for (int d = DRI56; d <= DRI87; d++) {
			/** 第一个字节(高位字节)+20H即十进制32 */
			int high_pos = d + 32;
			/** 第一个字节(高位字节)+128 */
			high_pos += 128;
			/** 给第一个字节(高位字节)赋值 */
			gbBytes[0] = (byte) high_pos;
			for (int p = MIN_POS; p <= MAX_POS; p++) {
				/** 第二个字节(低位字节)+20H即十进制32 */
				int low_pos = p + 32;
				/** 第二个字节(低位字节)+128 */
				low_pos += 128;
				/** 第二个字节(低位字节)赋值 */  
				gbBytes[1] = (byte) low_pos;
				/** 构造汉字字符并输出,下面就是见证奇迹的时刻 */
				String ccStr = new String(gbBytes, "GB2312");
				System.out.print("第" + (index++) + "个汉字是:");
				System.out.println(ccStr);
			}
		}
	}

三.GB 2312是如何兼容ASCII码的

        当遇到1开头的字,就把两个字节合起来解析为一个汉字;遇到0开头的字节,就把这个字节解析为一个ASCII码字符(0-12),

如:01000001表示'A'(A的ASCII码值为65)

如:11001110 11010010表示汉字'我'

标签:字节,int,GB2312,汉字,国标码,static,GB,public
来源: https://blog.csdn.net/junjuan131499/article/details/118694989

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有