Java编解码分析
一、为什么要编解码?
网络或磁盘传输的单位都是字节,平常我们使用的单位都是字符,所以数据需要在字节和字符之间进行转换。
二、编解码概念
1、编码:字符转换成字节
2、解码:字节转换成字符
三、常用字符集
1、ASCII码:共128个,单字节编码
2、ISO-8859-1:ISO制定的ASCII扩展编码,共256个字符,单字节编码,是很多系统的默认字符集
3、GB2312:双字节编码,中文字符集
4、GBK:双字节编码,中文字符集,兼容GB2312,扩展GB2312
5、UTF-16:双字节编码,即16bit,定长表示,包含世界上所有的字符,每个字符都用两个字节表示,Java以UTF-16作为内存的存储格式
6、UTF-8:变长表示,不同的字符使用1-6个字节表示
四、乱码原因
从char到byte(编码)或从byte到char(解码)的转换过程中编码和解码的字符集不一致导致的。
1、乱码示例一:编码使用GBK、解码使用ISO-8859-1
2、乱码示例二:使用不支持汉字的ISO-8859-1字符集,ISO-8859-1会把一切不在码值范围内的字符统一用3f表示,3f表示的就是?
五、Java中需要编解码的场景
1、I/O操作中存在编解码
2、内存操作编解码
3、URL编解码