字符编码

字符编码的发展这里写图片描述
ASCII编码

标准ASCII编码(0~127 7bit)
扩展ASCII编码(0~255 8bit)

UNICODE编码

❗️它并不涉及字符是怎么在字节中表示,它仅仅指定了字符对应的数字,仅此而已
❗️Unicode只是一个用来映射字符和数字的标准。它对支持的字符数量没有限制,也不要求字符必须占用两个、三个或其它任意数量的字节。
Unicode的具体编码实现是由UTF(Unicode Transformation Format)定义的

UTF编码(UCS Transfer Format)
UTF-16

使用2or4个字节编码。也是Unicode的一种具体编码实现,其常用字符都可以使用2Byte表示,其网络传输要考虑大小端问题,如果传输过程中一个字节信息丢失,剩下的字符串都无法正确解析,统统为乱码。所以其适合当做本地字符串编码格式。
‘A’0x41,大端:00 41,小端:41 00
编码规则:
• 若unicode码点在第一平面(BPM),则使用2Byte进行编码
• 若Unicode码点在其他平面(辅助平面),则使用4字节编码
这里写图片描述
UTF-8
变长编码,它可以用1~4字节表示一个符号,根据不同的符号而变化字节长度,因此他也是互联网上用得最多的一种Unicode编码规则,它是Unicode的一种具体编码实现。
编码规则:
• 对于单字节符号,字节第一位为0,后面7位为这个符号的Unicode码,对于英文字母,UTF-8编码和ASCII编码相同。
• 对于n>1字节符号,第一个字节前n位为1,n+1位为0,后面字节的前2位为10,剩下的从后至前填入Unicode(从后至前)编码
优势:
没有字节序列概念,所以特别适合用于字符串的网络数据传输,不用考虑大小端问题。对于非英文网页,能够避免各种乱码问题。
劣势:
一个汉字至少需要3字节表示,对于通过下标操作字符串的操作来说非常痛苦。并且网络传输会占用太多流量。

为什么UTF-8不需要考虑大小端问题?

因为在UTF-8编码中,其自身已经带了控制信息,如1110xxxx 10xxxxxx 10xxxxxx 10xxxxxx,其中1110就起到了控制作用,所以不需要额外的BOM机制。
附:
Unicode 目前规划的总空间是17个平面(平面0至16),0x0000 至 0x10FFFF。每个平面有 65536 个码点。
你只是大致知道平面0(「Basic Multilingual Plane」,即「BMP」)的 65536 个码点(即 0x0000 至 0xFFFF)如何编码,这不是 Unicode 的全部。
• BMP 的字符是 Unicode 中最基础和最常用的一部分,以 UTF-16 编码时使用2字节,以 UTF-8 编码时使用1至3字节。
• 超出 BMP 的字符以 UTF-16 或 UTF-8 编码都需要4字节。
• 另外还有一个比较少用的编码形式,UTF-32,它编码任何 Unicode 字符都需要4个字节。
Unicode 的基础是一个编号的字符集,在字符集之上又规定了模块化的编码等等技术层次,各种具体的编码形式并不一致,你说的「Unicode 只有两个字节」这句话根本不成立。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值