从昨天看调IIS支持CGI,调到晚上,终于能写CGI了,看了一下午~
今天看传递URL编码的译码问题,搜到的全是使用VB的Chr函数,一直在用C++写,遗憾的是好像C中并没有译码的函数。
于是决定自己写个,从网上搜到的汉字编码文件(html格式)的,自己写了个字符串处理的程序和转变为16进制映射表的函数,总算把URL的编码写好了,映射到MAP中查询;
所有的汉字和符号所在的区分为以下四个组:
(1)01区到15区。图形符号区,其中01区到09区为标准符号区,10区到15区为
自定义符号区。
(2)16区到55区。一级常用汉字区,包括了3755个一统汉字。这40个区中的汉字
是按汉语拼音排序的,同音字按笔划顺序排序。其中55区的90一94位未定义汉字。
(3)56区到87区。二级汉字区,包括了3008个二级汉字,按部首排序。
(4)88区到94区。自定义汉字区。
第10区到第15区的自定义符号区和第88区到第94区的自定义汉字区可由用户自行
定义国标码中未定义的符号和汉字。
汉字“啊”的区位码是1601,也就是在94X94的第16行,第1列,而在ULR的编码为%B0%A1,也就是B0A1,怎么转化成的这个?
16,01转化为16进制就是10,01,而ASCII表本身的可表示的命令区是00-1F,为了不和这些冲突,每个汉字的编码加上20,20H,拿“啊”做例子,也就是到了3021H,这也是国标码;
但是现在的中文编码普遍采用变形国标码,即国标码的变形:用的最多的变形方法是把国标码的第15位和第7位均置成1,由于国标码中第15位和第7位都是0,所以这种变形方法实际上就是国标码加上8080H。
拿“啊”做例子,也就是3021H + 8080H = B0A1H
这个B0A1就是这么来的。
下的码表是区位码,为了效率要直接写成URL编码形式对应汉字,即原来的是1601-啊,现在要改成B0A1-啊
总算写好了,写好的命名为fontDic.font文件,含有国标的所有汉字,大小为78K~~~