网页端的utf8和gb2312 之间关于osd 传参数的乱码问题
(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 传参数的乱码问题的更多相关文章
- UTF-8 GBK GB2312 之间的区别和关系
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...
- 关于烦躁的网页编码问题utf-8,gb2312。终于自己实践了一遍
俗话说实践是检验真理的唯一标准,的确如此. 自己一直比较懒,虽然觉得大牛应该一个记事本全部搞定,但自己还是喜欢用Dw或者Vs写好网页的架构,因为总觉得用notepad还要自己导入声明,而gVim还没有 ...
- Http:UTF-8与GB2312之间的关系
UTF-8里包括GB2312.UTF-8是国际通用的标准(包括世界所有的语言),而GB2312(只是简体中文)只适合做中文的网站.假设你想做个中文网页,但是还可以翻成英文的话,就得用UTF-8.如果用 ...
- Android中Activity之间访问互传参数
public class MainActivity extends Activity { private static final int OTHER = 1; @Override protected ...
- UTF-8 GBK UTF8 GB2312之间的区别和关系
UTF-8 GBK UTF8 GB2312之间的区别和关系 UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符 ...
- 做网站用UTF-8还是GB2312 & 各国语言对应字符集
经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...
- html编码常见的有utf-8和gb2312编码等,应该如何判断选择?
html如何选择编码,常见utf-8和gb2312编码如何判断选择 一.首先了解目前国内中文网页常用编码是utf-8 还是gb2313. 比如: 百度搜索 网页使用utf-8 腾讯新闻 网页使用utf ...
- 做网站用UTF-8还是GB2312?
经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...
- 编码的来历和使用 utf-8 和GB2312比较
经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, wordpress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...
随机推荐
- Android RxJava/RxAndroid结合Retrofit使用
概述 RxJava是一个在 Java VM 上使用可观測的序列来组成异步的.基于事件的程序的库.更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上.告别迷之缩进. RxAnd ...
- struts2+jquery验证注冊用户是否存在
注冊界面 register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...
- C8051F340之USB简介
背景 需求为实现一个键盘产品,于是将C8051F340作为主控制器.本篇记录C8051F340的USB控制器相关知识点,阅读本篇文章需要读者具有最基本的USB相关知识. 正文 C8051F340结构 ...
- ubuntu卸载第三方库
下面以pcl和opencv为例进行说明. 参考资料: https://www.cnblogs.com/txg198955/p/5990295.html ubuntu卸载opencv并重装opencv ...
- ML:交叉验证Cross-Validation
PRML中首章绪论的模型选择,提到两个方法: 1.交叉验证(Cross-Validation) 2.赤池信息准则(Akaike Information Criterion),简称:AIC. 交叉验证是 ...
- JBoss类隔离
http://tiger888.iteye.com/blog/572875这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔 ...
- JavaScript点击按钮显示 确认对话框
//JavaScript点击按钮显示确认对话框 <html xmlns="http://www.w3.org/1999/xhtml"> <head> < ...
- 【搞机】Apple Pencil 开箱
前言 上次入手了新的iPad Pro .好开心呢. 然后发现官方的笔不错呢~ 后来,苹果官方的12期免息分期又回来啦~ 买买买!!! 上图 体验 官方的笔真的不愧叫Pencil ,完美模拟铅笔的手感. ...
- css - 当文本内容长度超出屏幕宽度时,以省略号代替
<style> .ellipsis{ text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } </styl ...
- Linux 系统 pptpd+radius+mysql 安装攻略
分类: 原文地址:Linux 系统 pptpd+radius+mysql 安装攻略 作者:wfeng .你所需要的软件 内核最好能升级到2.6 如果你是centos的用户,可以通过yum update ...