ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UTF8与UTF16/32、Unicode、GB2312的故事

2022-07-05 00:35:56  阅读:189  来源: 互联网

标签:文字 xxxx 字节 UTF8 GB2312 utf32 Unicode 长度 utf16


文字不能直接存储在计算机中,因为计算机只认识0和1,这时候A国和B国都想到了用字典去一一对应。比如A国认为‘我’=0,‘好’=1,‘帅’=10,那么计算机中存储的应该是00000000,00000001,00000010。而B国认为‘帅’=0,‘个’=1,‘鬼’=10,那么计算机中同样的东西,A国的“我好帅”在B国就变成了“帅个鬼”。可见,一个输入要用相同的字典去读取才能看到同样的结果。

上面的字典可以看作文本的编码方式,也可以看作字符集;而A国的“我好帅”到B国变成“帅个鬼”就是我们常常遇到的乱码现象。从文字转换成计算机中的000...1就是文字的编码,而从000...1又转换成文字的过程就叫解码

那么,只有编码过程和解码过程使用同一种字符集,输入和输出才会是一样的!否则就是乱码

常见的编码方式有以下几种:

Ascii码、gb2312、utf8、utf16、utf32、Unicode等。

# 中间预留一波

utf16和utf32都是固定长度的,utf16固定16位,即2字节,可以表示最多216=65536个字符;utf32固定32位,即4字节,可以表示最多232约43亿个字符。

优点:获取第n位时,直接取出,不需要计算长度,因为总长度已知。

缺点:不方便跨平台,因为有些平台是大端字节序,有些平台是小端字节序,这些平台之间通信就需要转换字节序,是比较耗时的。用来存储西方的文字时,由于西方的文字比较少,一般1字节就可以,固定使用这些太浪费空间了!

 

utf8是变长的字符集!目前可以表示1~4字节的长度。那么肯定需要有规则能区分它的长度,不然就乱了。

规则:

0xxx xxxx表示1字节的长度,最多可以表示27=128个字符

110x xxxx 10xx xxxx 表示2字节的长度,最多可以表示211=2048个字符

1110 xxxx 10xx xxxx 10xx xxxx表示3字节长度,最多可以表示216=65536个字符

优点:可以无视字节序变化,不会导致乱码;对于欧洲的文字,可以避免严重的浪费空间;

缺点:长度可变,不能随时存取第n位数据,只能从最开始往后得出每一个序列。

 

一般,把文本加载到内存中用utf16和utf32,而跨平台存储与传输则使用utf8更适合

# 时间有限,to be continue...

标签:文字,xxxx,字节,UTF8,GB2312,utf32,Unicode,长度,utf16
来源: https://www.cnblogs.com/strong-monkey/p/16444934.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有