计算机 {字符集,字符编码,UTF/UCS,Latin-1,ASCII}

本文详细介绍了字符集、ASCII、Latin-1以及Unicode/UCS(包括UTF-8、UTF-16等编码格式)的概念、大小、性质和编码算法,重点讨论了不同编码在存储和表示多语言字符时的优势和适用场景。
摘要由CSDN通过智能技术生成

计算机 {字符集,字符编码,UTF/UCS,Latin-1,ASCII}

字符集

ASCII

字符集大小为: 2^7;
[0, 2^7) 对应了若干个拉丁字母;

Latin-1

定义

又称ISO 8859-1, 字符集大小为2^8;
+: [0, 2^7): 对应ASCII (即兼容ASCII);
+: [2^7, 2^8): 对拉丁字母的补充 (所以我认为 他为什么叫做Latin-1 这是因为这补充的128个字母 他们的最高位都是1);

Unicode/UCS

定义

#Unicode#
Universe Code万国码, 整个集合 分为17个子集(又称平面) 每个子集大小为16字节, 因此整个集合大小为[U+0, U+110000);
+(第0平面): 称为基本多文种平面Basic Multiligual Plane (BMP), [0, 0xFFFF], 兼容Latin-1, 里面包含了所有语言的常用字符和常用符号, 汉字大多在[4e00, 9FFF] (比如玫(73AB) 瑰(744B);
+(第[1,2,…,16]平面): 称为辅助平面, 基本很少用;

#UCS#
Universal Character Set通用字符集, 也称ISO 10646, 在编码方面 他和Unicode是一致的 在很多语境下 他俩是一个东西, 但两者有一些细微差别 不必考虑;

性质

U+?来表示某个字符, 比如U+73AB, U+7370 = 瑰;

编码

定义

性质

也称为页码Page code, 比如UTF-8的页码是65001;

算法

常用编码格式

玫瑰: 
  UTF-8:  E7,8E,AB,E7,91,B0
  UTF-8 BOM:  EF,BB,BF,E7,8E,AB,E7,91,B0
  UTF-16 BE:  FE,FF,73,AB,74,70
  UTF-16 LE:  FF,FE,AB,73,70,74
  ANSI: C3,B5,B9,E5
  GB18030:  C3,B5,B9,E5

UTF

Unicode/UCS Transformation Format;

UTF-8

[0, 7F](ASCII) -> [0...]; 占据1字节, 可容纳2^7个;
[80, 7FF] -> [110..., 10...]; 2字节, 可容纳2^11个;
[800, D7FF] 和 [E000, FFFF] -> [1110..., 10..., 10...]; 3字节, 可容纳2^16个;
依次类推…

对于一个U+x, 先找到x对应的多少字节, 比如他对应的2字节 那么 此时你只取x的低11位(保证高位一定没有1) 依次放到[110..., 10...]里面即可;
. 比如U+99, 他属于[80, 7FF]这类 所以占据2字节, 他的2进制为[10011001] 他不足11位 前面补0, 所以[000 10011001], 把他依次放到编码里, 即[11000010, 10011001] 这就是他的编码;

UTF-16(UCS-2)

性质

如果我们只涉及到第0平面, 那么使用UTF16 比用UTF8好;

基本多文种平面中的[U+D800, U+DFFF], 这些是不对应字符的, 而是供UTF-16使用来自定义映射的 (即UTF-16可以用这个区间 来映射辅助平面里的一些字符);
. 这一共是2^11=2048个数, 是为了来表示辅助平面里的字符的; 辅助平面一共有2^20个字符, 即他可以用(2^10)高位, (2^10)地位组合成一个pair来表示, 高位会对应基本平面里的[U+D800, U+DBFF], 低位会对应[U+DC00, U+DFFF], 即用2个基本平面里的编码(4字节) 来表示 辅助平面的字符;
. . 这里你可能认为, 不是需要2^10 * 2^10个吗, 为什么是相加呢? 因为 只要再加1位 (即第11位) 这样 就多了2^10种选择; 令...表示10位, 那么0... 和 1... 他俩各自都有2^10选择, 辅助平面里的任何字符 都会变成(0..., 1...)的形式, 因此 低位/高位 会占据基本平面里的0/1 ... 即共11位;

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值