字符编码:ASCII Unicode UTF-8

一、ASCII码

一个字节,可表示256种状态;目前ASCII码一共规定了128个字符的编码,只占用一个字节,最高1位同一为0。

二、非ASCII码

汉字10万左右,一个字节只能代表256种符号,肯定不够,就必须用多个字节表示一个汉字。比如简体中文编码方式GB2312,使用两个字节表示一个汉字,理论上最多256×256=65536。
GB类的汉字编码与Unicode和UTF-8没有关系

三、Unicode

每个符号都有一个独一无二的二进制编码
需要注意的是Unicode只是规定了符号二进制编码,但没规定如何存储(即需要几个字节)。有的需要3个字节而有的只需要1个字节,若统一规定字节数,则会造成大量的浪费。

四、UTF-8

UTF-8是Unicode的一种实现方式。
特点是变长的编码方式,它使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8 的编码规则很简单,只有二条:

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
  • 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVhRbafE-1582284364124)(https://user-images.githubusercontent.com/56629574/74404335-1fc6b100-4e65-11ea-9d9d-fd89d29a1f02.png)]

跟据上表,解读 UTF-8 编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-btgr0pQE-1582284364127)(https://user-images.githubusercontent.com/56629574/74404381-47b61480-4e65-11ea-9d8c-02201a66b54c.png)]

五、Unicode 与 UTF-8 之间的转换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jsb8ZORz-1582284364129)(https://user-images.githubusercontent.com/56629574/74404584-ea6e9300-4e65-11ea-9441-7bd71641f1c9.png)]

  1. ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对 Windows 简体中文版,如果是繁体中文版会采用 Big5 码)。
  2. Unicode编码这里指的是notepad.exe使用的 UCS-2 编码方式,即直接用两个字节存入字符的 Unicode 码,这个选项用的 little endian 格式。
  3. Unicode big endian编码与上一个选项相对应。
  4. UTF-8编码,也就是上一节谈到的编码方法。

UCS-2 格式可以存储 Unicode 码(码点不超过0xFFFF)。以汉字严为例,Unicode 码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,这就是 Big endian 方式;25在前,4E在后,这是 Little endian 方式。

转载:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

发布了550 篇原创文章 · 获赞 88 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/104433308