字符集总结
ASCII码
要点
- 包括了英文,符号,没有汉字
- 一个字节(8位)存储一个字符,首位是0,所以一共 8-1=7位来表示,所以可以表示128个(2的7次方)个字符
局限
- 对于美国人来说够用,但是对于汉字和其他语言而言就不够
GBK
编码
- 也是汉字内码拓展规范,国标,即汉字编码字符集
- 其中一个中文字符编码成两个字节的形式表现
匹配机制
- 汉字字符的二进制表示第一个字节的首位一定是1
- 兼容了ASCII,首位是1也匹配
Unicode
字符集
是国际组织制定的,可以容纳世界上所有文字和符号的字符集
UTF-32是四个字节表示一个字符 但是这样太浪费了 弃用
UTF -8
- 是Unicode字符集的一种编码方案,可变长,分为1个字节 ,2个字节,3个字节,4个字节
- 英文字符,数字占一个字符,兼容ASCII编码,汉字字符占3个字节
匹配机制
- 红色标明的不能改,将汉字编码后填充进去
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3J04RAT2-1666519182773)(http://pic.msky31.top/i/2022/10/10/zlhzfu.png)]
注意的点
- 编码时使用字符集,和解码时使用的字符集必须一致,不然会乱码,原因是因为匹配不到需要的二进制码
- 一般英文和数字不会乱码,是因为很多字符集都基本兼容了ASCII编码
编码与解码
- 编码:把字符按照指定字符集编码成字节
- 解码:把字节按照指定字符集解码成字符
Java实现
编码
byte[] getBytes()
方法
String data="wo爱ni";
//使用默认编码
byte[] b1=data.getBytes();
//指定编码方式
byte[] b2=data.getBytes("GBK");
解码
String(byte[] bytes)
方法
//默认
String s1=new String(b1);
String s1=new String(b1);
//指定
String s1=new String(b1,"GBK");
(b1);
String s1=new String(b1);
//指定
String s1=new String(b1,"GBK");