IO流之计算机存储规则

引言:

字节流可以读写所有文件,字符流只可以读写纯文本文件

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编码方式中文占据两个字节 

 

 

1.6拓展:为什么字节流拷贝不会出现乱码呢?

         用字节流读取时,按照一个字节一个字节的读取,在ASCII码表中查询,一个字节查询完毕打印一个字节,因此中文会乱码。

         一个字节一个字节的拷贝,数据没有丢失

          用文件打开时,如果打开时编码表、编码方式和数据源一致,不会出现乱码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值