(0)HZK16 点阵字库原理及实现

(1)utf8 和 unicode gb2312之间的转换

(2)gb2312 的拓展 gbk 实现了更多的文字编码 像“瞭望塔”的瞭子在gb2312中是没有的

华丽分割线

---------------------------author:pkf

----------------------------------time:2014-03

----------------------------------------qq:1327706646

(0)HZK16 点阵字库原理及实现

  

  HZK16字库是符合GB2312标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有6763个,符号682个.
  其中一级汉字有 3755个,按声序排列,二级汉字有3008个,按偏旁部首排列.
  我们在一些应用场合根本用不到这么多汉字字模, 所以在应用时就可以只提取部分字体作为己用.
  HZK16字库里的16×16汉字一共需要256个点来显示, 也就是说需要32个字节才能达到显示一个普通汉字的目的.
  我们知道一个GB2312汉字是由两个字节编码的,范围为0xA1A1~0xFEFE.
  A1-A9为符号区, B0到F7为汉字区. 每一个区有94个字符(注意:这只是编码的许可范围,不一定都有字型对应,比如符号区就有很多编码空白区域).
  下面以汉字"我"为例, 介绍如何在HZK16文件中找到它对应的32个字节的字模数据.
  前面说到一个汉字占两个字节,这两个中前一个字节为该汉字的区号,后一个字节为该字的位号.
  其中, 每个区记录94个汉字, 位号为该字在该区中的位置. 所以要找到"我"在hzk16库中的位置就必须得到它的区码和位码.
  区码:汉字的第一个字节-0xA0 (因为汉字编码是从0xA0区开始的, 所以文件最前面就是从0xA0区开始, 要算出相对区码)
  位码:汉字的第二个字节-0xA0
  这样我们就可以得到汉字在HZK16中的绝对偏移位置:
  offset=(94*(区码-1)+(位码-1))*32 注解:
     1.区码减1是因为数组是以0为开始而区号位号是以1为开始的
  2.(94*(区号-1)+位号-1)是一个汉字字模占用的字节数
  3.最后乘以32是因为汉字库文应从该位置起的32字节信息记录该字的字模信息(前面提到一个汉字要有32个字节显示)
我画的图示:
|<---16位,2字节-->|+
○○○○○●○○●○○○○○○○ | -> 0x04,0x80
○○○○●●●○●○●○○○○○ | -> 0x0E,0xA0
○●●●●○○○●○○●○○○○ | -> 0x78,0x90
○○○○●○○○●○○●○○○○ | -> 0x08,0x90
○○○○●○○○●○○○○●○○ | -> 0x08,0x84
●●●●●●●●●●●●●●●○ | -> 0xFF,0xFE
○○○○●○○○●○○○○○○○ | -> 0x08,0x80
○○○○●○○○●○○●○○○○ |16位-> 0x08,0x90
○○○○●○●○●○○●○○○○ |2字节-> 0x0A,0x90
○○○○●●○○○●●○○○○○ | -> 0x0C,0x60
○○○●●○○○○●○○○○○○ | -> 0x18,0x40
○●●○●○○○●○●○○○○○ | -> 0x68,0xA0
○○○○●○○●○○●○○○○○ | -> 0x09,0x20
○○○○●○●○○○○●○●○○ | -> 0x0A,0x14
○○●○●○○○○○○●○●○○ | -> 0x28,0x14
○○○●○○○○○○○○●●○○ + -> 0x10,0x0C 所以,'我'在HZK16 16*16点阵字库的存放的序列为:
一行一行地保存,共16行,每行2个字节, 共32个字节
04 80 0E A0 78 90 08 90 08 84 FF FE 08 80 08 90
0A 90 0C 60 18 40 68 A0 09 20 0A 14 28 14 10 0C
以上排列是横的,用点阵取字模的还有竖的排列,取摸工具在附件里面
    for(k=0; k<16; k++){
for(j=0; j<2; j++){
for(i=0; i<8; i++){
flag = buffer[k*2+j]&key[i];
printf("%s", flag?"●":"○");
http://www.cnblogs.com/nbsofer/archive/2012/11/01/2749026.html
http://blog.chinaunix.net/uid-24219701-id-3343764.html

(1)utf8 和 unicode gb2312之间的转换

int DeBaiFenStrin2Int(unsigned char *des,unsigned char *src,int size)
{

unsigned char *pSrc = src;
unsigned char *pDes = des;
unsigned char outPut[100]={0};
unsigned char inPut[100];

unsigned char *pOut=outPut;
unsigned char in[10]={0};//in[3];
unsigned char out[4]={0};
memset(in,0,sizeof(in));
memset(outPut,0,sizeof(outPut));
memset(inPut,0,sizeof(inPut));

int bufSize = size;
int i,j;
unsigned char *pOutPut =outPut;
memset(pDes,0,strlen(pDes));
while(bufSize>0)
{
memset(in,0,sizeof(in));
memset(outPut,0,sizeof(outPut));
if(*pSrc=='%'&&(pSrc+9)!=NULL)
{
pSrc++;
in[0]=*(pSrc);
pSrc++;
in[1]=*(pSrc);
pSrc++;
in[2]='\0';
out[0]=htoi(in);

pSrc++;
in[0]=*(pSrc);
pSrc++;
in[1]=*(pSrc);
pSrc++;
in[2]='\0';
out[1]=htoi(in);

pSrc++;
in[0]=*(pSrc);
pSrc++;
in[1]=*(pSrc);
pSrc++;
in[2]='\0';
out[2]=htoi(in);

UTF8ToGB2312(out, pOut, strlen(out));
*pDes=pOut[0];
pDes++;
*pDes=pOut[1];
pDes++;
bufSize-=9;
}
else
{
*pDes=0xa3;
pDes++;
*pDes=(*pSrc)+0x80;
pDes++;
pSrc++;
bufSize--;
}

}

(2)gb2312 的拓展 gbk 实现了更多的文字编码 像“瞭望塔”的瞭子在gb2312中是没有的

瞭望的瞭字 在gb2312中没有编码,在gbk中给出了编码

http://blog.csdn.net/zhouxiaoli521/article/details/5675626

http://ipseeker.cn/tools/pywb.php gb2312查询

http://www.mytju.com/classcode/tools/encode_utf8.asp utf8 查询

http://www.knowsky.com/resource/gb2312tbl.htm

http://www.verydemo.com/demo_c161_i856.html gb2312 查询表unicode gb2312对应表

http://blog.chinaunix.net/uid-20564848-id-73496.html  浅析unicode编码utf8编码和gb2312编码之间的转换关系

http://blog.csdn.net/zhouxiaoli521/article/details/5675626 gbk 转gb2312

http://bbs.csdn.net/topics/390090950 dsp 端的a[]={'a','b','c'}取数组大小

更新2015-7-15 修复一个小bug

通过utf-8的包容性以及gb2312的定义可知,utf-8在数据表示方面可以占据1~6个字节,而汉字+字符的数据就是1~3个字节之类,出去其他的就可以认为1和3个字节

int DeBaiFenStrin2Int(unsigned char *des,unsigned char *src,int size)
{

unsigned char *pSrc = src;
unsigned char *pDes = des;
unsigned char outPut[100]={0};
unsigned char inPut[100];

unsigned char *pOut=outPut;
unsigned char in[10]={0};//in[3];
unsigned char out[4]={0};
memset(in,0,sizeof(in));
memset(outPut,0,sizeof(outPut));
memset(inPut,0,sizeof(inPut));

int bufSize = size;
int i,j;
unsigned char *pOutPut =outPut;
memset(pDes,0,strlen(pDes));
while(bufSize>0)
{
memset(in,0,sizeof(in));
memset(outPut,0,sizeof(outPut));
if(*pSrc=='%'&&(pSrc+9)!=NULL&&*(pSrc+1)<0x80)//此处稍加判断
{
pSrc++;
in[0]=*(pSrc);
pSrc++;
in[1]=*(pSrc);
pSrc++;
in[2]='\0';
out[0]=htoi(in);

pSrc++;
in[0]=*(pSrc);
pSrc++;
in[1]=*(pSrc);
pSrc++;
in[2]='\0';
out[1]=htoi(in);

pSrc++;
in[0]=*(pSrc);
pSrc++;
in[1]=*(pSrc);
pSrc++;
in[2]='\0';
out[2]=htoi(in);

UTF8ToGB2312(out, pOut, strlen(out));
*pDes=pOut[0];
pDes++;
*pDes=pOut[1];
pDes++;
bufSize-=9;
}
else
{
*pDes=0xa3;
pDes++;
*pDes=(*pSrc)+0x80;
pDes++;
pSrc++;
bufSize--;
}

}

return 0;
}

http://baike.haosou.com/doc/7105043-7328054.html

http://www.360doc.com/content/11/0726/16/7302658_135971963.shtml

48-0

65-A

97-a

网页端的utf8和gb2312 之间关于osd 传参数的乱码问题的更多相关文章

  1. UTF-8 GBK GB2312 之间的区别和关系

    UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...

  2. 关于烦躁的网页编码问题utf-8,gb2312。终于自己实践了一遍

    俗话说实践是检验真理的唯一标准,的确如此. 自己一直比较懒,虽然觉得大牛应该一个记事本全部搞定,但自己还是喜欢用Dw或者Vs写好网页的架构,因为总觉得用notepad还要自己导入声明,而gVim还没有 ...

  3. Http:UTF-8与GB2312之间的关系

    UTF-8里包括GB2312.UTF-8是国际通用的标准(包括世界所有的语言),而GB2312(只是简体中文)只适合做中文的网站.假设你想做个中文网页,但是还可以翻成英文的话,就得用UTF-8.如果用 ...

  4. Android中Activity之间访问互传参数

    public class MainActivity extends Activity { private static final int OTHER = 1; @Override protected ...

  5. UTF-8 GBK UTF8 GB2312之间的区别和关系

    UTF-8 GBK UTF8 GB2312之间的区别和关系     UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符 ...

  6. 做网站用UTF-8还是GB2312 & 各国语言对应字符集

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...

  7. html编码常见的有utf-8和gb2312编码等,应该如何判断选择?

    html如何选择编码,常见utf-8和gb2312编码如何判断选择 一.首先了解目前国内中文网页常用编码是utf-8 还是gb2313. 比如: 百度搜索 网页使用utf-8 腾讯新闻 网页使用utf ...

  8. 做网站用UTF-8还是GB2312?

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...

  9. 编码的来历和使用 utf-8 和GB2312比较

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, wordpress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...

随机推荐

  1. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在同一台PC上运行多个TwinCAT程序

    右击桌面右下角的TC2图标,切换到PLC Configuration,然后在Plc Settings中设置数量为4(TC2最多可以运行的数量是4个),然后点击Apply   可能需要输入登录用户名和密 ...

  2. css网页单位

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. python中好用的pip

    1.windows/linux 下安装pip见上篇博客 http://www.cnblogs.com/Edwardzhao/p/5856924.html 2.好用的方法 pip install xxx ...

  4. Python将一个大文件按段落分隔为多个小文件的简单方法

    今天帮同学处理一点语料. 语料文件有点大,而且是以连续两个换行符作为段落标志,他想把它按段落分隔成多个小文件.即每3个段落组成一个新文件.因为曾经没有遇到过类似的操作,在网上找了一些类似的方法,看起来 ...

  5. EditText输入为空button不可点击搜索

    一丶任务详情 二丶改动后演示效果 三丶改动过程 分析:非常明显这里是须要监听EditText,推断输入字符串长度是否不为0来改变Button样式 首先的屡清楚代码逻辑在适当的位子加监听推断是最好的处理 ...

  6. Oracle,用left join 替代 exists ,not exists,in , not in,提高效率

    Not IN问题 Exists,not Exists,in,not in 例如: FROM YSHB B WHERE YSHA.code=b.code ) 等同于 DELETE A FROM YSHA ...

  7. 【微信小程序】日历插件,适用于酒店订房类小程序

    本插件在原作者(传送门:http://blog.csdn.net/lengyue1084/article/details/71248778)基础上升级. 增加了点击选择具体日期和数据传输功能. 效果图 ...

  8. 【php】在php代码嵌入HTML代码(适用于公众号开发)

    核心:HTML的双引号["]一定要转义,不废话: $link = "<a href=\"http://www.baidu.com\">最新活动链接& ...

  9. Ubuntu下开启mysql远程登陆权限

    在腾讯云上租了个云服务器,并且安装启动了mysql. 这时候用本地的mysql workbench去连接就会报错,提示无法成功连接. 其实这是因为没有开启账户的远程登陆权限.那么下面就开启一下: 1. ...

  10. 关于new与=号创建对象的区别

    (1)先定义一个名为str的对String类的对象引用变量:String str: (2)[在[栈]中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为" ...