当前位置:网站首页>Golang中UTF编码和字符集

Golang中UTF编码和字符集

2022-07-04 19:47:00 南一道街丶

一、UTF编码和Golang字符集

1.字符集

一个比特位要么是1要么是0,无论如何都不能得出一个字母A,我们可以将这些例如A-Z的字符对数字进行一个映射关系,比如0100 0001代表A,然后我们创建字符集,将这些映射关系收录起来,得到一个字符编号对照表,就叫做字符集

img

image-20220703204046836

2.ASCII字符集

ASCII只收录了128字符,扩展字符集有256个

image-20220703204258217

3.GB2312字符集

ASCII不支持汉字,就有了GB2312字符集

image-20220703204337531

4.Unicode字符集

以上字符集还有很多字符没有收录,我们想制作一个通用字符集,Unicode协会就是做的这些事

5.定长编码,变长编码

5.1 定长编码

如果要表达出"eggo世界",我们直接使用Unicode字符集拿到他们编号,但是拿到编号后怎么划分顺序又是一个问题,比如随便划分成了"攲"

image-20220703204848318

image-20220703205007728

解决办法:不管这些字符的长度是多少,统一按照边界最长的来,位数不够高位补0,字符边界问题解决了

新的问题:浪费内存,而且字符集收录的符号越多,编码跨度越大,“定长编码浪费显著”,还得想办法解决内存消耗问题

image-20220703205416801

5.2 变长编码

定长编码不行,我们就使用变长编码,小编号少用字节,大编号多用字节

解决方案如下:

[0,127]一字节,最高标志位为0

[128,2047]二字节,最高标志位110,还有固定标志位10

[2048,65535],最高标志位1110,有两个固定标志位10

01100101,最高字节为0,去掉标志位,其他对应的是就是e

11100100 10111000 1001011 用1110开头,除去三个标志位,剩下部分组合,就能得到世界的"世"

image-20220703211048530

6.UT8详解

UTF-8是变长编码方式,可以用1~4个字节表示,

编码规则如下:

1.对于一字节,第一位为0,剩下7为用Unicode编码表示

2.对于n个字节(n>1),第一个字节的前n位为1,剩下字节的 前两位为10

原网站

版权声明
本文为[南一道街丶]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45802793/article/details/125589778