开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情
ASCII
ASCII字符集定义了128个字符(0到127个十进制),0-31个称为不可打印,32到127用来表示可打印的字符如空格、A等;它可以存储在7位中,但一个字节有8位,128-255存储的内容没有达成一致,不同地区用的不一样,这些不同的使用方式称为code pages;
Unicode
旨在创建一个单一的字符集,其中包括地球上所有合理的书写系统以及一些虚构的字符集; 在Unicode中,理论上将一个字符映射到一个code point上;
code point:U+0048,U+表示这个是Unicode,后面的数字是十六进制的;比如"Hello"对应的code points是:U+0048 U+0065 U+006C U+006C U+006F
UTF-8
编码Unicode的一种方式;在UTF-8中,0-127 的每个code point都存储在一个字节中。只有128 及以上使用 2、3字节,实际上最多 6 个字节存储;
总结
ASCII 与 Unicode都是字符集,ASCII只定义了0-127个字符对于127-255没有规定以至于每个地区的都不一样; Unicode想要创建一个包含所有地区所有字符的字符集(全球统一),在Unicode中,逻辑上一个字符对应一个code point;但对于code point如何存储在磁盘上或内存中,又有不同的方式(称为Encoding,编码); 早期的编码方式有“存储在两个字节中”方法,会在Unicode 字符串的开头存储一个 FE FF,叫做字节顺序标记(标记高位低位的顺序) 后期出现了UTF-8这种编码方式, 用于在内存中使用 8 位字节存储 Unicode 代码点字符串;在 UTF-8 中,从 0-127 的每个代码点都存储在一个字节中。只有代码点 128 及以上使用 2、3,实际上最多 6 个字节存储
It does not make sense to have a string without knowing what encoding it uses 没有所谓的纯文本,不知道编码方式的字符串毫无意义