UTF-8 GBK

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。UTF-8用1到6个字节编码UNICODE字符

ASCII的7位字符集,它是美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。

UNICODE字符集。它通过增加一个高字节(共两个字节)对ASCII字符集进行扩展,当高字节位为0时,低字节就是ASCII字符。Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

UTF(Universal Transformation Format)通用转换格式。常见的UTF格式有:UTF-7, UTF-7.5, UTF-8,UTF-16, 以及UTF-32

UTF-8是Unicode的实现方式(编码方式)之一。

 

UTF-8是一种变长字节编码方式。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

 

UTF8可以容纳31位二进制数字。Unicode的最大码位0x7FFFFFFF也只有31位。

 

  1. GB2312简体中文的编码格式, 只支持6763个常用汉字;
  2. GBK是GB2312基础上扩容后兼容GB2312的标准,包含全部中文字符,支持简体中文及繁体中文;
  3. GBK通用性比UTF8差,不过UTF8占用的数据库比GBK大;
  4. GB2312、GBK都属于双字节字符集 ;

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换    ,也即:   
GBK、GB2312 ---> Unicode ---> UTF-8    
UTF8 ---> Unicode ---> GBK、GB2312

 

汉字UNICODE编码表http://www.chi2ko.com/tool/CJK.htm

 

字符集(character set)和字符编码(character encoding)的混淆

 

GBK即汉字内码扩展规范,是「国家标准扩展」三个词的拼音缩写

 

 由于GBK到Unicode的汉字没有直接的映射关系,传说GBK是按拼音排序,Unicode是按部首排序的。所以要转换之前必须得有个对照表。

GBK与UNICODE互转算法http://blog.csdn.net/tge7618291/article/details/7608510


BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记,在UTF-16里是FF FE,在UTF-8里是EF BB BF。

这个标记是可选的,可以With BOM或者NO BOM。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UTF-8GBK是两种不同的字符编码方式,UTF-8是一种变长编码,而GBK是一种固定长度编码。在C语言中,可以通过使用相关库函数来实现UTF-8GBK换。 首先,要将UTF-8编码的字符换为GBK编码的字符,可以使用iconv函数。iconv函数是一个在C语言中进行字符集换的库函数,它可以将一个字符由一种编码方式换为另一种编码方式。首先,需要先使用iconv_open函数来打开一个换句柄,将源字符串的编码方式指定为UTF-8,目标字符串的编码方式指定为GBK。然后,使用iconv函数将源字符串换为目标字符串。 示例代码如下: ```c #include <iconv.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *source = "UTF-8编码的字符串"; char *target = malloc(sizeof(char) * (strlen(source) + 1)); // 打开换句柄 iconv_t conv = iconv_open("GBK", "UTF-8"); if (conv == (iconv_t)(-1)) { perror("换句柄打开失败"); exit(1); } // 进行换 size_t inBytes = strlen(source); size_t outBytes = strlen(source) + 1; size_t ret = iconv(conv, &source, &inBytes, &target, &outBytes); if (ret == (size_t)(-1)) { perror("换失败"); exit(1); } // 关闭换句柄 iconv_close(conv); printf("GBK编码的字符串:%s\n", target); free(target); return 0; } ``` 同样地,要将GBK编码的字符换为UTF-8编码的字符,只需要将上述示例代码中的源编码和目标编码对调即可。 以上就是在C语言中如何进行UTF-8GBK编码的换的简要说明。通过使用iconv函数,我们可以在C语言中轻松实现这两种编码方式之间的换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值