关于“为何Unicode中文字符占取2个字节,而 UTF-8却占3个字节”的网络解释修正...

本文深入探讨了UTF-8编码的设计原理及其相对于Unicode的优势。通过对比不同编码方式,阐述了UTF-8如何在保持英文字符高效存储的同时,解决中文字符的编码问题。

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

https://www.cnblogs.com/deepblue775737449/p/7604738.html

 

学到编码时,有个疑问——好好的占2字节的Unicode不用,却要用占3字节的UTF-8编码。发明 UTF-8的初衷不就是为了修正Unicode中任何字符至少占用2个字节的弊端吗?

虽然UTF-8英文字符占空间减少了(由Unicode中的16位动态缩减为与ASCⅡ一致的8位),但你在中文字符这部分增为3字节=24位,减少的空间一下子又没了。

查了一些博客文,发觉都是互抄的,错误低级到可笑。。。学点东西咋这难呢,实体媒体要防范盗版书,数字媒体还要防范“不走脑子的copy”

幸好,高大上的知乎有人手打文字答疑。我写点自己的解释。。。

(百度百科:目前的用于实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。)

Unicode符号范围        |   UTF-8编码方式

(十六进制)             | (二进制)       #Unicode部分为16进制编码, UTF-8编码为2进制

—————————————————————–————————————–
0000-0000 007F   | 0xxxxxxx      #UTF-8规定,若1字符=1字节,首位须为‘0’
0080-0000 07FF   | 110xxxxx 10xxxxxx  #UTF-8规定,若1字符=2字节,高位字节前3位为‘110’,低位前2位为‘10’
0800-0000 FFFF   | 1110xxxx 10xxxxxx 10xxxxxx  #UTF-8规定,若1字符=3字节,高位字节前3位为‘110’,后面低位前2位一律为‘10’。(占4,5字节字符规则以此类推)

 

由于utf-8规则天然占用字节前几位,若与Unicode同样用2字节16位表示一个中文字符,则utf-8除去规则占用,只剩余16-5=11位,无法。

那么看下面“1字符=3字节” 这段,除去规则占用,还剩余8x3-8=16位,恰好符合16位=1中文字符这一Unicode规则。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值