[java IO流]之编码和解码

编码和解码

码表的理解:

在计算机中无论任何数组的传输、存储、持久化,都是以二进制的形式体现的,那么当我存一个字符的时候,计算机需要持久化到硬盘,或者保存在内存中。这个时候保存在内存、硬盘的数据显然也是二进制。那么当我需要从硬盘、内存中取出这些字符,再显示的时候,为什么二进制会变成了字符呢?

这就是码表存在的意义:

1.码表其实就是一个字符和其对应的二进制相互映射的一张表。

2.这张表中规定了字符和二进制的映射关系。

3.计算机存储字符时将字符查询码表,然后存储对应的二进制。

4.计算机取出字符时将二进制查询码表,然后转换成对应的字符显示。

大致可以这样理解:

1.不同的码表所容纳的字符映射也是不同的

2.在有些码表中一个字符占用1个字节,1个字节能表示的范围是-128到127,总共为256。所容纳256个字符映射

3.而有的码表中一个字符占用2个,甚至3个字节,因此能容纳的字符映射也更多

常见的码表:
ASCII:

美国码表,码表中只有英文大小写字母、数字、美式标点符号等。每个字符占用1个字节,所有字符映射的二进制都为正数,因此有128个字符映射关系。

GB2312:

兼容ASCII码表,并加入中文字符,码表包含英文大小写字母、数字、美式标点符号占一个字节,中文占两个字节,中文映射的二进制都是负数,因此有了128x128=16384个字符映射关系。

GBK/GB18030:

兼容GB2312码表,英文大小写字母,数字,美式标点符号,占一个字节。中文又占两个字节 ,第一个字节为负数,第二个字节为正数和负数,因此有128*256=32768个字符映射关系。

Unicode码表:

国际编码表,包含各国大多数常用字符,每个字符都占用2个字节,因此有65536个字符映射关系。Java语言使用的就是Unicode码表

UTF-8码表:(是Unicode编码表的一种实现形式)

同样是国际编码表,但英文占一个字节,中文占3个字节

www.cnblogs.com/csguo/p/7402034.ht...

编码和解码:

编码:

编码是信息从一种形式或格式转换为另一种形式的过程称为编码

简单来说:编码就是将看的懂的信息通过编码表转换成为看不懂得信息。

解码:

是编码的逆过程。

简单来说,解码就是将看不懂的信息通过编码表转换为看的懂的信息

注意:在开发当中要求服务器和客户端的编码保持一致,双方提前约定好一种编码表

乱码的原因:

1.人为转换

2.服务器和客户端编码表不一致

3.服务器系统编码和人为编码不一致

4.URL编码和人为编码不一致

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!