字符集
强调:UTF-8是编码规则,不是字符集
过程:
字符 --查表获得对应数字,--编码
解码---查表----获取字符
ASCII码 :一个字节 8bit
GBK字符集(windows系统默认使用的GBK,系统显示ANSI)
存储规则:
GBK英文编码规则:
- 英文用一个字节存储,完全兼容ASCII码
- 不足8位,前面补0
GBK汉字编码规则:
- 汉字两个字节存储
- 高位字节二进制用1开头,转成十进制之后是一个负数
Unicode字符集
UTF-16编码规则:用2~4个字节保存
UTF-32编码规则:用4个字节保存
UTF-8编码规则:用1~4个字节保存
英文用1个字节,中文用3个字节表示
乱码:
原因:
- 读取数据时没有读完整个汉字
- 编码和解码的规则不统一
避免方法:
- 不要用字节流读取文件
- 编码时使用同一个编码规则,同一个码表
java中编码和解码的实现
public byte[] getByte(String charsetName) 使用指定的方式编码
public String(Byte[] bytes,String charSetName) 使用指定的方式解码
(不带参就使用默认编码,解码)
@Test
public void encode() throws UnsupportedEncodingException {
String str = "无敌是多么寂寞";
byte[] bytes= str.getBytes("UTF-8");
String str1= new String(bytes,0,bytes.length,"GBK");
System.out.println(str1);
}