编码
一 、ANSI
编程语言就是符号。单个符号的不同状态可以代表不同信息,多种符号不同状态的组合就构成了我们的语言世界。计算机起源于美国,系统中使用的符号都是以英语字母为基础构造的。这就造成了使用英语作为主要语言的地区,使用计算机特别方便,就是不同字符的组合。
1.1、标准
计算机的存储单元中,单个ANSI码值占用一个字节,也就是8个二进制位,这里只使用低7位二进制位,最高位b7用作奇偶校验位。从0x00(00000000)到0x7f(01111111),一共128个字符(0~127)。
第0到32号以及第127号总共34个字符是控制字符或通讯专用字符。
第33到126号是字符,其中第48到57号是0到9是个阿拉伯数字,65到90是26个大写字母
奇偶校验:
代码在传送的过程中用来检验是否出现错误的一种方法,一般分为奇校验与偶校验。
奇校验:
正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1
偶校验:
正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1
1.2、拓展
标准的ANSI表示英语语言没有问题,但是无法覆盖中文的字符组成。于是不同地区纷纷对ANSI进行拓展以满足本地区使用的需要。
1.2.1、GB2312
默认的简体中文编码,使用2个大于128字符表示一个中文汉字,由6762个常用汉字和682个全角的非汉字字符组成。对于使用该编码的系统,GB2312指的就是ANSI编码。
1.2.2、GBK
在GB2312的基础上进行拓展,以添加汉语中的偏僻字以及繁体字。同样是2个字节,高字节是127号的内码,低字节不要求是127号之后的了。
1.2.3、GB18030
在GBK进行了扩展,以满足少数民族的使用。
二 、Unicode
由于各个国家和地区都对ANSI进行地区化拓展,结果导致信息不互通,无法解码。中文如果想正常显示必须安装中文编码,不然系统的显示,输入和输出都是乱码。ISO(国际标准化组织)决定废除所有的地区性编码,采用一种包含全球所有文化,所有字母和符号的编码--UCS。该编码规定所有字符必须使用2个字节进行编码。
2.1、UTF-8(UCS Transfer Format)
Unicode的网络传输实现方式之一,存储使用8个位作为基本单位,可变长度的编码。同时兼容了ANSI
单字节:
0XXXXXXX
双字节:
11XXXXXX 10XXXXXX
三字节:
111XXXXX 10XXXXXX 10XXXXXX
四字节:
1111XXXX 10XXXXXX 10XXXXXX 10XXXXXX
2.2、UTF-16(UCS Transfer Format)
Unicode编码的网络传输实现方式之一,每次传输16位。同时也是Unicode编码的直接实现。
2.3、UTF-32(UCS Transfer Format)
Unicode编码的网络传输实现之一,每次传输32位。
三 、\r\n与\n以及\r的区别
3.1、\r\n
Windows操作系统文本换行结束标志。使用该系统进行文件读取使用的方式不同,结果也不同
文本形式(字符流,使用缓冲区)
读取文件的时候,会自动将\r\n转换成\n
写入文件的时候,会自动将\n转换成\r\n
二进制形式(字节流,直接操作文件)
无论读取还是写入,不会有任何转换。
3.2、\n
Linux操作系统文本换行结束标志。
3.3、\r
ios操作系统文本换行结束标志。
四、参考