c语言把unicode转换为字符,[C语言]unicode与utf-8编码转换(一)

Unicode与UTF-8编码转换(一)

Unicode是一个符号集合,规定了符号的二进制代码,而UTF-8是Unicode的一种实现,具体Unicode和UTF-8的联系如下所示:Unicode符号范围                    UTF-8编码规则

1 | 0000 0000 - 0000 007F |                                              0xxxxxxx

2 | 0000 0080 - 0000 07FF |                                     110xxxxx 10xxxxxx

3 | 0000 0800 - 0000 FFFF |                            1110xxxx 10xxxxxx 10xxxxxx

4 | 0001 0000 - 0010 FFFF |                   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

5 | 0020 0000 - 03FF FFFF |          111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

6 | 0400 0000 - 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

由图可清晰的知道Unicode和UTF-8间的联系。其中UTF-8编码规则中的x就是让你编码的地方。接下来逐一举例说明各段的编码:

1,范围0x00-0x7F:给定的用例Unicode码为0x41,对应的二进制位:0100 0001,而UTF-8编码规则为:0xxxxxxx。故有:

0xxx  xxxx

+    100 0001

0100 0001

所以Unicode编码0x41转换为UTF-8后为:0x41。

所以对于区间段0x00-0x7F之间的Unicode和UTF-8编码是一致的。即与ASCII码一致(ASCII共规定了128个字符的编码)

2,范围0x80-0x7FF:给定的用例Unicode码为0x123,对应的二进制为:0001 0010 0011,而UTF-8编码规则为:110xxxxx 10xxxxxx。故有:

110x xxxx 10xx  xxxx

+       0 0100     10 0011

1100 0100 1010 0011

所以Unicode编码0x123转换为UTF-8后为:0xC4A3

3,范围0x800-0xFFFF:给定的用例Unicode码为0x4E25,对应的二进制为:0100 1110 0010 0101,而UTF-8编码规则为:1110xxxx 10xxxxxx 10xxxxxx,故有:

1110 xxxx 10xx  xxxx 10xx xxxx

+          0100     11 1000    10 0101

1110 0100 1011 1000 1010 0101

所以Unicode编码为0x4E25转换为UTF-8后为:0xE4B8A5

4,范围0x10000-0x10FFFF:给定的Unicode码为0x23456,对应的二进制为:0010 0011 0100 0101 0110,而UTF-8编码规则为:111100xx 10xxxxxx 10xxxxxx 10xxxxxx。故有:

1111 00xx 10xx xxxx  10xx xxxx 10xx xxxx

+           00     10  0011     01 0001    01 0110

1111 0000 1010 0011 1001 0001 1001 0110

所以Unicode编码为0x23456转换UTF-8后为:0xF0A39196

5,范围0x200000-0x3FFFFFF:给定的Unicode码为0x234567,对应的二进制为:0010 0011 0100 0101 0110 0111,UTF-8编码规则为:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx。故有:

1111 10xx 10xx  xxxx 10xx xxxx  10xx xxxx 10xx xxxx

+                       00 1000    11 0100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值