引言:
字节流可以读写所有文件,字符流只可以读写纯文本文件
1、计算机的存储规则
八个比特为组成一个字节,字节是计算机中最小的存储单位
1.1、字符集
每一个二进制数字,对应码表中的一个英文字符,中文字符,符号等
ASCII:英文(0-127)
GBK:英文➕中文(GB国标 K拓展)
BIG5:台湾文字用
UniCode:英文➕中文(万国码)
1.2、存取规则 (英文)
想要存储在计算机里,必须是八的倍数,所以对于不足8位的二进制数字,计算机会进行补码操作。
存储:在ASCII查询存储英文对应的十进制数字,将其转化做二进制数字,对其进行编码,再存储。
读取:对其进行解码,随后将二进制数字转化做十进制数,在ASCII码表中查询,再获得。
特点:英文一个字节存储,字符集都兼容ASCII码表,开头以0补码,转换成十进制一定是一个正数。
ASCII码表:
1.3、存取规则(中文)
与英文类似,在GBK字符集,或者Unicode字符集进行查询,随后将其编码。
为了与英文区分,同时因为汉字数量很多,有以下特点:
1、汉字在字符集中对应的数字都是两个字节。
2、汉字的第一个字节(也称之为高位字节),一定是以1开头,转换成十进制后是一个负数。
3、汉字的第二个字节(也称之为低位字节),可以是1/0开头,转换过后可正可负。
1.4、Unicode解码方式
UTF-16:2-4个字节(英文2个)
UTF-32:4个字节
UTF-8 :1-4个字节(英文1个,中文三个)
补码:
英文:开头0
中文:1110 10 10
小tips
UTF-8是一个字符集吗?
答:不是,UTF-8是Unicode字符集的一种编码方式
一种字符集只能对应一种编码方式吗?
答:不是,Unicode有多种编码方式
1.5、乱码现象
为什么会有乱码?
原因1:
字节流读取文件时,按照一个字节一个字节的读取,在UTF-8编码方式中,中文为3个字节,读取时拆分来读,会出现乱码现象。
字节流读取按照一个字节一个字节的读取,在ASCII码表中查询,一个字节查询完毕打印一个字节,因此中文会乱码。
原因2:
编码时和解码时采取的方式不统一。
注:GBK编码方式中文占据两个字节