1.计算机的存储规则
在计算机中,任意数据都是以二进制的形式来存储的。
每一个二进制数表示的0,1被称为比特位,8个比特位组成一个字节。
字节:计算机最小的存储单元。
2.ASCII字符集
用于存储英文字符,查询制定ASCII码表0-127个字符,进行相应的编码解码。
3.GB2312字符集
1980年发布,1981年5月1日实施的简体中文汉字编码国家标准。收录7445个图形字符,其中包括6763个简体汉字。
4.BIG5字符集
台湾地区繁体中文标准字符集,共收录13053个中文字,1984年实施。
5.GBK字符集
2000年3月17日发布,收录21003个汉字。
含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
windows系统默认使用的就是GBK。系统显示:ANSI。
1.GBK存储英文规则
- 要求:英文用一个字节存储,完全兼容ASCII
- GBK英文编码规则:不足8位,前面补0
2.GBK存储汉字规则
- 规则1:汉字两个字节存储
- 规则2:高位字节二进制一定以1开头,转成十进制之后是一个负数
- GBK汉字编码规则:不需要变动
6.Unicode字符集
又称万国码。
国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。
1..Unicode存储规则
- UTF-16编码规则:用2~4个字节保存
- UTF-32编码规则:固定使用四个字节保存
- UTF-8编码规则:用1~4个字节保存
英文:1个字节;中文:3个字节
7.乱码原因
1.原因1:读取数据时未读完整个汉字
解决方法:不要用字节流读取文本文件。
2.原因2:编码和解码时的方式不统一
解决方法:编码解码时使用同一个码表,同一个编码方式。
8.JAVA中的编码和解码
idea默认使用UTF-8,eclipse默认使用GBK
- public byte[ ] getBytes():使用默认方式进行编码
- public byte[ ] getBytes(string charsetName):使用指定方式进行编码
- string(byte[ ] bytes):使用默认方式进行解码
- string(byte[] bytes, String charsetName):使用指定方式进行解码
//编码
String str = "ai你一万年";
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes));//[97, 105, -28, -67, -96, -28, -72, -128, -28, -72, -121, -27, -71, -76]
byte[] gbks = str.getBytes("GBK");
System.out.println(Arrays.toString(gbks));//[97, 105, -60, -29, -46, -69, -51, -14, -60, -22]
//解码
String str2 = new String(bytes);
System.out.println(str2);//ai你一万年
String str3 = new String(gbks,"GBK");
System.out.println(str3);//ai你一万年