字符编码

比特、字节、字符
一个二进制位(bit)存在0和1两种状态,一个字节(byte)由8个二进制位组成,存在256种状态,每个状态如0100 0000 可用来对应字符。

ASCII码就规定了128个字符的编码,如SPACE空格是32(为0010 0000)、A是65(01000001)等128个符号

非ASCII码: 英文可用128个符号覆盖,但其他语言是不够的,所以也用一个字节表示自己的文字,这样每个字符代表的字母就不一样了。亚洲国家汉字不同于字母,无法组合完成,数量巨大,可以通过多个字节组合实现扩充,如简体中文常见的编码方式是GB2312,用两个字节表示一个字符。

ASCII→GB2312(1980年)→GBK→GB18030(PC平台必然支持),这些GB均为双字节字符,从ASCII均为向下兼容,区分中英文的方法为最高位不为0(GB存储方式为big endian)
(内码为计算机自带的编码方式)

如果编码打开方式和写入方式不同,就会出现乱码。

Unicode 将所有的字符纳入其中,并赋予独一无二的编码。

unicode存在的问题: 1)一部分字符需要三个甚至更多的字节组合,对于本来可以一个字节搞定的字符,很浪费。2)计算机是如何分辨是unicode编码还是ASCII码,错误的识别会导致如unicode字符(3个字节组成),被当做3个字符。

UTF-8是在互联网上使用最广的一种unicode的实现方式, 也就是utf-8是unicode的一种
UTF-8为可变字节,可以用1~3个字节表示。
UTF-8的编码规则:1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
在这里插入图片描述
Unicode码可以采用UCS-2格式直接存储,但存储存在Little endian和Big endian的区别。little endian为第二个字符在前,文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。而UTF-8开头为EF BB BF
参考:
基本参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值