字符和字节相关知识

一,首先明白什么是字符,字符集,和字符编码的概念
1,字符:字符就是我们平时用到的字符串,比如a,b,c,d和中文和一些符号,阿拉伯数字等
2,字符集:字符集就是这些字符的集合,现在我门聊的比较多的字符集一般都有ASCII 字符集、GB2312 字符集、Unicode 字符集,UTF-8(当然也有-16,-32后面再介绍)等
3,字符编码:是指对于字符集中的字符,将其编码为特定的二进制数,因为计算机只认识止这些二进制数,所以必须要进行字符编码

那么这些字符集的区别是什么呢?
1》ASCII:这个是最早的美国人用的(因为当时计算机就他妈在美国有,美国人发明的吗),这个当时因为只在美国用,所以ASCII只有128个字符,也就是英文字母的大小写,阿拉伯数字,一些符号(空格,下划线什么的类似符号),这在当时美国是完全够用的,但是后来计算机普及到世界,这些就不够用了,所以下面介绍的Unicode就应运而生了
2》Unicode:由于原来的ASCII不够用,所以出现了Unicode字符集,使用十六进制数字,而且在数字前面加上前缀 U+,比如,大写字母「A」的 unicode 编码为 U+0041,汉字「严」的 unicode 编码为 U+4E25。更多的符号对应表,可以查询 unicode.org,或者专门的汉字对应表。
当然Unicode为了兼容ASCII编码,所以他的前128个的值和ASCII是一样的,也就是说Unicode表示的那些英文字符 数字 符号的值和ASCII是一样的
3》GBK 编码:简单介绍一下,这个是当时全世界没有统一使用的编码方式的时候我过自己针对汉子的一套编码方案,当时比如日本也有自己的一套编码方案
4》UTF-8 编码:Unicode 看起来已经很完美了,实现了大一统。但是,Unicode 却存在一个很大的问题:资源浪费,资源浪费,资源浪费(重要的事情说三遍),为什么会有资源浪费呢,你想,当时ascll编码的这些英文字母一个字节就够了,但是比如像一些中文需要两个字节才能表示,一些其它语言甚至需要四个字节才能表示,这时我门为了能表示所有的,我门都需要开辟出来4个字节(加入最多的就是4个字节),这时岂不是造成了大量的资源浪费,所以UTF-8 编码有应运而生了。
UTF-8 编码是一种针对 Unicode 的可变长度字符编码(他的英文全程是8-bit Unicode Transformation Format),他其实就是Unicode编码的实现方式之一,其实Unicode还有其它编码实现标准比如UTF-8,UTF-32等,它使用一到四个字节来表示字符,例如,ASCII 字符继续使用一个字节编码,阿拉伯文、希腊文等使用两个字节编码,常用汉字使用三个字节编码,等等。
总体来说,字符编码是干嘛的呢, 1,就是把字符转为计算机能认识的二进制数据,那么他怎么转的呢,这就是下面说的了 2,因为他里面囊括了世界所有的字符,所以什么都可以得到正确解析,都可以得到正确的且是唯一的编码 ,所以这也就是保证了不会出现乱码,会说你在美国“helloworld”编码的二进制是一个值,到了中国编码成了另一个值,这时候解析的肯定就不正确了,所以这就是统一的好处啊

二,关于字节
1,字节是什么?
字节就是Byte,也就是一个计算机的计量单位
2,字节的换算
ASCII码:一个英文字母(不分大小写)占一个字节的空间,
一个中文汉字占两个字节的空间。
UTF-8编码:一个英文字符等于一个字节,
一个中文(含繁体)等于三个字节。
Unicode编码:一个英文等于两个字节,
一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小

数学间的运算
1KB=1024B;1MB=1024KB=1024×1024B(B就是字节的意思,一定严格区分1B和bit的区别)。1B是1字节,而一字节是等于8bit的
B的取值范围是0-255,为什么会是这个区间呢,因为1B=8bit,那么8bit最小是多少呢,最小是00000000也就是0,8bit最大是多少呢也就是11111111也就是我们平时说的ff,也就是255

所以总的来说,你说字符和字节的关系是什么,其实没什么特殊的关系,也就是一个字符占多少空间的问题,字节是空间单位,一个字符占不同大小的字节空间.

三,关于字符流和字节流
1,字符流:就是通过字符编码编成的一堆二进制流,这里因为他是通过某一种特定的编码规范编码的,比如utf-8,所以当你收到的时候,可以通过该编码规范在进行解码,举个例子,现在咱们使用的http,http的传输使用的字符编码规范就是ISO8859-1,我门收到之后使用同样的编码规范可以解出来相应的数据(当然并不是网络请求一定用ISO8859-1)
2,字节流:字节流本身就是一堆二进制,像我门的mp3,mp4文件,他们传输都是字节流,他们并不需要进行字符编码什么的,他们只是通过来回的传输,然后交给计算机识别就行了

你可能感兴趣的:(字符和字节相关知识)