首页 > 编程知识 正文

unicode编码方式,gbk转成unicode

时间:2023-05-05 23:44:08 阅读:175912 作者:4222

Unicode :所有字符都是两个字节,对于英语字符,高位字节为0,低位字节与ASCII代码相同

小于GB2312:127的字符的含义与原来相同,但如果由两个大于127的字符相连,则为

一个汉字,前一个字节(他称为高字节) (0xA1到0xF7,后一个字节) (低字节) )。

从0xA1到0xFE,我们可以组合大约7000多个简体汉字。 在这些代码中,我们仍然

穿插数学符号、罗马希腊字母、日语的假名,与ASCII中原本的数字联系起来

、标点符号和字母都重新组织了2字节长的代码。 这是常说的“全角”字,原来是127

号码以下的东西被称为“半角”文字。

GBK :中文字符是2字节; 英语字符是一个字节,与ASCII代码相同。 GBK主要是为了弥补GB2312中文字符不足的问题,GBK不再限制低字节必须大于127,从而扩展了20000多个代码位。 GBK和Unicode是两种完全不同的编码格式,没有转换规则,相互的转换只能通过查找表方法进行。

UTF-8 :其编码规则如下。

因为英文字符有一个字节,中文字符有三个字节,中文字符使用Unicode代码,所以要将GBK转换为UTF-8,必须先将其转换为Unicode。

根据以上内容,对于包含中英文字符的文件,对于只包含GBK和GB2312最节省通信量的英文字符的文件,使用Unicode以外的任意编码都是一样的。Unicode在任何情况下都没有优势,而GBK和GB2312则没有优势因此,GBK和GB2312可以稍后居住。

带gbkunicode函数的:

voidgbk2unicode(char*gbk,char *unicode ) { unsigned short code_gbk,code_uni; intSlen=Strlen(gbk; int ulen=0; int k=0; while(kslen ) if ) gbk[k]0x80 ) { unicode[ulen ]=0; unicode[ulen ]=gbk[k]; k=1; } else { code_gbk=0; code_gbk=gbk[k]; k=1; code_gbk=8; code_gbk=gbk[k]; code_uni=ff_convert(code_gbk,1; unicode[ulen ]=code_uni8; unicode[ulen ]=code_uni0xff; k=1; }}其中的ff_convert函数来自cc936.c,实际执行了查找表操作。

带Unicode的UTF-8函数:

voidunicodetoutf8(char*pinput,char *pOutput ) { int ulen=0; unsigned short code_uni; int k=0; while(pinput[k]!=0 || pInput[k 1]!=0) { code_uni=0; code_uni=pInput[k]; code_uni=8; k; code_uni=pInput[k]; k; //printf(codeuni=%d,ulen=%dn )、code_uni,ulen ); if(code_UNI0x80 ) { pOutput[ulen ]=code_uni; }else{if(code_Uni0x800 ) { pOutput[ulen ]=0xc0|code_uni6; //前五位的p output [ ulen ]=0x 80|(code _ uni0x 3f ); } else { p output [ ulen ]=0x E0|code _ uni 12; //前4位poutput[Ulen]=0x80|((code_uni6)0x3f ); //中间6位p output [ ulen ]=0x 80|(code _ uni0x 3f ); //后6位} } } pOutput[ulen]=0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。