编码和解码

Java 中的编码
 
谈到编码,一直都很模糊这个概念。
首先明确3个对象: 字符集合(),字符集合的 编码(),字符集合的 编码 的编码方案()
 
 
定义
结合java
注意
 
字符集合
一组各类形状的集合,相似仓颉造的字,没有实际含义,只是一个有独一无二的形状。就像牢房里面的囚犯,每一个人都是独一无二的。
 
计算机要显示文字图案,对于全部显示的文字图案,均可以看作一个字符。
字符集合是基于操做系统的,有个相似字符库,来保存全部会出现的字符。这里是指显示,实际保存仍是一串二进制数。
没啥注意的都是固定的。
 
字符集合的 编码
上面的每一个形状,给他一个惟一标识,一对一的关系,就像每一个囚犯都有惟一的一个编号。
有不少规则,规定每一个字符对应什么数字。咱们熟知的有Assis码,中国的规则有gb2312 ,统一的是 unicode ,java内部用的是 unicode。例如‘A’,Assis码中用65表示。
 
最先只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。一个字节。
,unicode 通常占两个字节。
java 中 定义的char类型字符,就是占两个字节。
 
变量在java程序中,咱们定义的基本类型,char 就只用2个字节存储。
 
字符集合的 编码 的 编码方案
再对上面的惟一标识作一次处理,定义一个规则,每一个数字按照规则,转换成一个新的标识。每一个监狱劳动改造的规则不同,有的监狱,超过60岁少作点,有的超过70岁少作点
要把上面规定好的 字符的编码 存储到计算机中,也就是以2进制保存起来,
例如
上面的A字符对应  字符的编码 65 ,二进制就是  0 100 0001,用8位保存到计算机磁盘中。
我这里只作了简单的转换,实际上,人们制定了不少规则,将 字符的编码  65 转换成 1-n个字节保存。
规则有定长的:每一个字符的编码用统一长度字节保存,好比都用3个字节保存。
不定长的:典型的就是utf-8,用 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节。
数据持久化,保存到磁盘中,都是字节为基本单位。
 
按照编码方案,将程序中的 字符的编码 转换成 可以存储到本地的 字节数组 这个状况叫作编码。
 
相反 ,咱们从磁盘或者其余路径获得一个字节数组,按照编码方案,将其转换成 一个数字,也就是字符的编码,这个过程叫作解码。
 
 
编码解码过程
 
 
步骤
1
2
3
4
编码
字符,java中显示 
 
 
字符集合的 编码,  unicode查找 java中实际存储
 
 
230013
字符集合的 编码 的编码方案 用utf-8
java中的方法 :将 字符集合的编码 一个数值转化 成一个字节数组
byte[] bytes = String.valueOf(c2).getBytes("utf-8");
{-28,-72,-83}
 
 
解码
一个字节数组{-28,-72,-83}
字符集合的 编码 的编码方案 
用gbk解码,就是把这个字节数组按照gbk的方式
获得一个 xxxx 数字(在这里我不知道)
根据xxxx,经过unicode查找 显示的
java中,将 字节数组 转换 成一个数值String a = new String(bytes,"gbk")
 
这里注意我用的是一个 String接受,String 能够转化成char[]
这每一个字符其实,在java中就是一个数字,就像230013同样。
因为编码和解码方式不同 就致使了乱码
 
 
 
参考:
相关文章
相关标签/搜索