急!急!请问怎样写一段能生成全部汉字内码的程序(一个汉字一行)(100分)

  • 主题发起人 主题发起人 vivid
  • 开始时间 开始时间
V

vivid

Unregistered / Unconfirmed
GUEST, unregistred user!
请指教:

我要对汉字进行排序,首先要得到一个包含全部汉字内码的汉字库。
请问怎样写一段能生成全部汉字内码的程序(一个汉字一行)
 
请问我要收回分数怎么办?
 
回答上边这个问题者也给分
 
GB 2312-80 规定,“对任意一个图形字符都采用两个字节(Byte)表示。每个字节均采用 GB 1988-80
及 GB 2311-80 中的七位编码表示。两个字节中前面的字节为第一字节,后面的字节为第二字节。”
习惯上称第一字节为“高字节”,第二字节为“低字节”。
  GB 2312-80 将代码表分为 94 个区(Section),对应第一字节;每个区 94 个位(Position),
对应第二字节。两个字节的值,分别为区号值和位号值各加 32(20H)。
  GB 2312-80 规定,01~09 区(原规定为 1~9 区,为表示区位码方便起见,今改称 01~09 区)
为符号、数字区,16~87 区为汉字区。而 10~15 区、88~94 区是有待于“进一步标准化”的“空白
位置”区域。但第 10 区推荐与第 3 区的 94 个图形字符(即 GB 1988-80 中的 94 个图形字符)相同,
字形宽度为其宽度的一半。

详见: http://www.haiyan.com/steelk/navigator/ref/gb2312/gbindex.htm

>>要收回分数怎么办
除了要版主帮忙回收,没有别的办法。
 
GB2312-80 《信息交换用汉字编码字符集》基本集规定一个汉字的内码由两个字节组成。
汉字内码与区位码之间的关系是:
内码第一字节=区码+160
内码第二字节=位码+160

在区位码中,01-09区为特殊字符,10-55区为一级汉字(3755个最常用的汉字,按拼音字母
的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。
每个区有94个汉字

所以,您的问题可以这样

1、程序
program gb2312;
{$APPTYPE CONSOLE}
var ii, jj: integer;
begin
for ii:=10 to 87 do
for jj:=1 to 94 do
writeln(chr(ii+160)+chr(jj+160));
end.

2、运行
gb2312 > aaa.txt

aaa.txt 就是您要的一个汉字一行汉字库。
 
谢谢两位大侠的提示!
yysun的答案是可行的。

to creation-zy:
两个字节的值,分别为区号值和位号值各加 32(20H)。

第一字节=区码+32
第二字节=位码+32
读出来的是一些字符,怎么读出汉字?
 
GB码的编码范围为2121H~777EH,与 ASCII 码有重叠,通行将GB码两个字节的最高位均置1(MSB=1),
以示区别。因此,实际应用的GB码是GB码高位置1后的变形码,编码范围为 0A1A1H~0F7FEH。

与前面所述“两个字节的值,分别为区号值和位号值各加 32(20H)”就成了孙老师所说的:
“内码第一字节=区码+160,内码第二字节=位码+160” —— 128 + 32 = 160

我记得以前在资料上看到过:
GB码的取值范围是: 第一字节:0xA0-0xFE 第二字节:0x40-0xFE
~~~~~ 小于160!?
下面是一些第二字节小于160的例子:
(由于我使用的是英文操作系统,粘贴这些汉字有问题,现仅贴出HEX,见谅!)
B388 F341 E39F
 
creation-zy: GB2312-80的编码第一子节不会小于160的
GB2312收录7445个图形字符,汉字占6763个。

0x40 是 BIG5 和 GBK 里的东西,不是 GB2312的。
网上随便找找就会知道:例如这个 http://www.unihan.com.cn/digital/wangxb_ful.htm

去年又搞出个 Gb18030-2000 收录 27000多个汉字。
 
两位大侠:
谢谢
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部