utf-8、utf-16、Unicode区别

这篇讲编码基础的博客非常浅显易懂,记录一下。
字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼)

前几天面试问了一个utf-8和utf-16的区别,今天来总结一下。

Unicode是一种字符集,每一个字符对应一个唯一的编号,同时兼容ASCII码,ASCII码在Unicode中还是用一个字节长度就可以表示,而常见的汉字在Unicode中可能是两个字节才能表示,所以在Unicode字符集中不同的字符可能对应不同长度的二进制编码。

所以程序并不能直接处理Unicode这种编码,比如客户端传给服务器一段字节流,服务器程序并不知道是哪几个字节表示一个字符。
所以需要另外一种编码方式,这种编码能够直接告诉计算机这一段字节流中哪几个字节可以表示一个字符,从而能够将二进制编码转换成对应的字符。

即需要一种将Unicode转换为计算机能读懂的编码,这便是UTF,UTF 是 Unicode Transformation Format 的缩写,即Unicode转换格式。
有utf-8,utf-16,utf-32三种编码方式。

utf-8:变长的编码方案,用1~6个字节编码一个字符。

如果一个字节的最高位是0,表示是单字节编码;
多字节编码:第一个字节中从最高位开始1的个数就表示几个字节来编码一个字符,其余的都是以10开始。

0xxxxxxx 单字节编码;
110xxxxx 10xxxxxx 双字节编码;
1110xxxx 10xxxxxx 10xxxxxx 三字节编码;
x表示Unicode中的编码。

utf-16:用2个或者4个字节表示一个字符。
Unicode 中编码范围在0000~FFFF的,utf-16直接存储。

utf-32:用4个字节编码一个字符。
长度固定。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值