谁知道GB2312中汉字的十进制范围?

Linda426 2014-08-18 05:08:07
查GB2312字符编码表 汉字的范围是 OXB0A1-OXF7FE(中间有空位),如何用十进制表示的范围该是怎样的?
我查到OXB0A1对应的十进制是21834,OXF7FE对应的十进制为40766,认为范围是 21834-40766不对,有比21834更小的汉字,谁能帮我算一下?或者告诉我如何算对应的十进制也可以。谢谢!
...全文
421 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2014-09-19
  • 打赏
  • 举报
回复
在网上下载 “国际标准超大字符集字体支持包 Unifonts6.0” 一个 exe 安装程序,它提供 Unicode 6.0 所有收录的字符码表,和一个特殊的冷僻字体,用它我们可以显示很多康熙字典里面的冷僻汉字了。 汉字有很多,只是仅有少数收录在 GB2312 中。对于像考古学家,古文献研究者来说,这些字符集很明显不够用嘛,比如当年香港人把电报码录入到电脑中时就办法输入冷僻字啊,很多人名和地名的字并没有出现在 GB2312/GBK/GB18030 中啊。 如果想知道最小的汉字是什么,可以跑个循环打印所有字符,你应该能从其中认出一个字符是不是汉字,找到最前面 的一个就肯定是了。 下面这个例子显示了 0x20020 - 0x2002F 之间的16个冷僻汉字,你把它改改就能打印所有字符了,是不是 GB2312 中的汉字直接尝试用 GB2312 解码再编码看看是否正常,比如 0x20027 解码后得到 63 明显是错误的,再编译后得到问号(乱码)。

		int[] codePoints = new int[16];
		for (int i = 0; i < 16; i++)
		{
			codePoints[i] = 0x20020 + i;
		}

		String a = new String(codePoints, 0, codePoints.length);

		System.out.println("字符串:" + a);
		System.out.println("字符串换算成 char[] 存储总长度是 :" + a.length());

		System.out.println("codePointAt(7) 索引换算成 charAt 索引  :" + a.offsetByCodePoints(1, 7));

		String c = a.substring(a.offsetByCodePoints(1, 7), a.offsetByCodePoints(1, 8));

		System.out.println("UTF-8   for " + c + " is " + toString(c.getBytes("UTF-8")) + " ==> "
				+ new String(c.getBytes("UTF-8"), "UTF-8"));
weinianjie1 2014-09-16
  • 打赏
  • 举报
回复
直接转换是完全正确的,不过你得区分GB2312和GBK,参考我的博文http://blog.csdn.net/weinianjie1/article/details/8903352

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧