字符集学习
标准ASCII字符集
ASCII(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文,符号等
标准ASCII使用一个字节存储一个字符,首位是0,总共可以表示128个字符
GBK(汉字内码扩展规范,国标)
汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储
注意:GBK兼容了ASCII字符集
GBK规定:汉字的第一个字节的第一位必须是1
Unicode字符集(统一码,也叫万国码)
Unicode是国际组织制定的,可以容纳世界上所有文字,符号的字符集
提供了多种编码方案
UTF-32
使用四个字节表示一个字符
UTF-8
是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节
如果是一个字节,第一位必须是0
如果是两个字节,第一个字节前三位必须是110,第二个字节前两位必须是10
如果是三个字节,第一个字节前四位必须是1110,后面两个字节前两位必须是10
如果是四个字节,第一个字节前五位必须是11110,后面三个字节前两位必须是10
技术人员在开发时都应该使用UTF-8编码
字符编码时使用的字符集和解码时使用的字符集必须一致,否则出现乱码
比如:使用gbk对如下字符串进行编码
使用UTF-8进行解码
英文、数字一般不会乱码,因为很多字符集都兼容了ASCII编码
编码:把字符按照指定字符集编码成字节
解码:把字节按照指定字符集解码成字符
Java代码完成对字符的编码
方法 | 说明 |
---|---|
byte[] getBytes() | 使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
Java代码完成对字符的解码
方法 | 说明 |
---|---|
String (byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的String |
String(byte[] bytes,String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的String |
总结:
ASCII字符集:只有英文、数字、符号等,占1个字节
GBK字符集:汉字占2个字节、英文、数字占1个字节
UTF-8字符集:汉字占3个字节、英文、数字占1个字节