编码和解码通俗解释

在内存中,本来没有字符的概念,每个字节都是一个0-255的数字。我们把数字进行编号,每个数字代表一个字符。
追根溯源,以ASCII码为例。比如65(十进制)定义为字符'A',66定义为'B',61定义为'='。
这就是编码。然后才有了char型定义,实际上等同于byte,只是使用char型时就知道要表示的是字符。
如果char ch=65,然后printf("%c",ch),出来就是'A',这就是解码了。如果printf("%d",ch),那出来就仍是65。 
单字节byte只能支持0-255的编码,对于亚洲语言,像中文汉字,是完全不够用的。所以之后有双字节(0-65535)以及多字节编码的出现。
以双字节为例,0-65535并不能同时为多种语言编码。所以打个比方,同一个数字,可能在中文GBK编码时定义为汉字'王',而在日文编码MS932中就被定义为'小'。
当内存中的数字被解释为字符(文字和符号)时,就是解码过程,把文字和符号用数字定义时就是编码。
实际编码过程中,不少是前后字节有关联性定义的,并非我说的那么简单。 
在网络传输时,实际上仍然是单字节,甚至是字节中1个bit一个bit传输的。
我们在传输时使用byte数组,即基本类型,而在传输前后转回GBK中文编码。
以老美的视角来看问题,则从byte变成亚洲语言(GBK/Unicode)属于编码encoding,而相反过程是解码decoding。


另外:
    str.getByte()方法使用“平台的默认字符集”(例如本机就是GBK)将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值