Unicode编码(UTF8/UTF16)

来源:互联网 发布:java怎么与mysql连接 编辑:程序博客网 时间:2024/05/17 10:41
  • 本文主要涉及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