Unicode,ASCII和UTF-8 编码区别与联系(通俗易懂)

本文介绍了Unicode编码,包括USC-2和USC-4格式,重点讲解了Unicode如何解决ASCII码的局限性。接着阐述了UTF-8编码规则,指出其变长编码的特点,以及如何通过首位二进制位来判断字符所占字节数,最后通过汉字'知'的编码示例说明UTF-8编码的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unicode

我们知道unicode编码解决了ASCII码只支持英文数字等字符的单一问题;

unicode编码目前普遍采用USC-2格式,该格式采用两个字节来编码一个字符,所以两个字节最多可以表示2^16=65536个字符(一个字节为8位)

但是两个字节的容量要表示的是各国语言,而汉字字符----简体加繁体字就共有约7w个!,显然2个字节根本无法囊括所有汉字。因此也有采用USC-4格式,即4个字节来编码字符的情况,但目前为止普遍仍采用USC-2格式,毕竟常用几千个汉字足以满足所需!

同时字符编码一般用十六进制来表示,比如汉字"经"的编码是0x7ECF,其中0x表示十六进制,7ECF若转换为十进制就是32463,二进制为1111110 11001111,两个字节足以表示这个字符

当然,unicode编码表也继承了ASCII码表中的字符,只是以十六进制的形式来表示而已。例如,字符”a“在ASCII码表中对应的十进制序号为97,在unicode编码表中对应的十六进制序号为0x61,换算到十进制仍然为序号97!

UTF-8

如前所述,unicode编码有诸多问题。首先,它始终采用两个字节来表示字符,这就会对只需要一个字节来表示的字符来说,产生浪费空间的情况;其次,两个字节能表示的字符太有限!

这个时候,UTF-8编码规则发挥作用的时候到了,它是一种可变长度的编码规则,根据不同情况可以占用1~4个字节不等。

那么就会有一个问题,既然字符所占有的字节数不尽相同,程序在读一段连续的字节的时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值