Unicode编码(UTF8/UTF16)

  • 本文主要涉及utf-8以及utf-16编码.
  • 一般我们谈论Unicode编码我们谈论的是UTF-16编码
  • UTF-16(Unicode)
UTF-16中的基本单位是两个字节的码元,基本的码元范围是(0x0000-0xFFFF),
UTF-16的字符映射范围是(U+0000,U+10FFFF),
当一个生僻字符需要使用0xFFFF以上的映射范围时,其需要使用两个码元(4Byte)进行表示.
其映射规则如下
第一个码元(前导代理)范围:0xD800 - 0xDBFF
第二个码元(后尾代理)范围:0xDC00 - 0xDFFF:(0xDBFF-0xD800+1)*(0xDFFF-0xDC00+1) === (0x10FFFF-0xFFFF)双射
所以(0xD800 - 0xDBFF)范围内的码元不能单独表示字符,其必须与后尾代理一起构成一个完整字符.
一般来说,大部分编程语言字符串的内存编码都使用UTF-16进行统一,java class文件编码(jvm内部),python3内存表示以及javaScript字符串的内存表示都使用了UTF-16.
  • UTF-8是UTF-16的缩略版本,其使用1-6个字节存储数据,在某些情况下可以大大减少存储空间,所以一般保存到文件时会选择utf-8,减少存储空间.
  • 一般来说,我们对于内存的编码控制较少,最多会在调用length之类方法时有影响(比如java中String的length方法只是很简单的统计码元个数,并不对辅助平面内的字符进行区分),比如”\uD834\uDF06”.length() –> 返回2;javaScript的也是如此,但python则会将其识别为一个字符,返回1.).更多的保存到文件时的编码控制,会涉及到UTF-8这才是我们最常接触的编解码部分.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值