unicode和utf8编码

  • A+
所属分类:Asura笔记本
摘要

由于ASCII存在字符含量过少的缺陷,所以不但我国自己搞出了国际码。其他国家也都设计出了符合自己国情的字符集


兼容问题

由于ASCII存在字符含量过少的缺陷,所以不但我国自己搞出了国际码。其他国家也都设计出了符合自己国情的字符集

但是这就带来了问题

各个字符集之间不兼容怎么办?

Unicode

Unicode 4个字节32位

真正有效范围: 0x0 - 0x 10ffff
约十进制:1114112 个字符

unicode相当于 “区位码”(也就是电脑中运行的),实际存储要按照相应的编码方案

字符集 编码方案
UTF-8
UTF-16

UTF-8的存储

UNICODE编码(16进制) UTF8字节流(二进制)
000000 - 00007F 0xxxxxx
000080 - 0007FF 110xxxxx  10xxxxxx
000800 - 00FFFF 1110xxxx  10xxxxxx 10xxxxxx
090000 - 10FFFF 11110xxx  10xxxxxx 10xxxxxx 10xxxxxx

例子:

比如 “啊” => UNICODE = 554A

0x00554A 处于区间 000800 - 00FFFF

所以格式为: 1110xxxx  10xxxxxx 10xxxxxx

0x554a 二进制为 : 0101 0101 0100 1010

所以实际存储的内容为:
格式:
1110xxxx  10xxxxxx 10xxxxxx
填充:
11100101 10010101 10001010
实际则为:
E5958A

UTF-16的存储

unicode 范围: 0x00000000 - 0x0010FFFF

uft-16

多语言字符区
0x00000000 - 0x0000ffff => 占两个字节

辅助平面区
0x00100000 - 0x0010FFFF => 占四个字节

以16位2字节进行对齐

总的来说存储比较复杂。。。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: