字符集
- ASCLL码不包含中文
- GBK是中文专用
- Unicode国际通用
- UTF-8 可变长编码
- ISO 8859-1
编码解码
编码:字符转二进制,便于传输
示例:
String str = "我是一个好人";
byte[] dates = str.getBytes();//括号汇总可选填字符集名称,表示按某种字符集编码
解码:将二进制机器码转化为字符,便于阅读
示例:将网络上传来的数据转换为字符串
str = new String(dates); //str与dates为上文中的变量。new String的方法请查看String类的构造方法。
乱码解决
转码时导致乱码可能有两种原因:
1.接收的数据不完整
如:str = new String(bytes,0,bytes.length-1);
2.字符集不统一
如:将中文使用ISO-8859-1解码导致乱码
str = new String(sBytes,"ISO-8859-1");
本文代码
public class Charset
{
public static void main(String[] args){
String str = "我是好人";
byte[] sBytes = str.getBytes();//按默认字符集解码
System.out.println(sBytes.length);
for(byte b : sBytes){
System.out.println(b);
}
System.out.println("------------------");
//乱码原因
//丢失数据
str = new String(sBytes,0,sBytes.length-1);
System.out.println(str);//输出结果为:我是好?
//编码错误
try{
str = new String(sBytes,"ISO-8859-1");
}catch(Exception e){
System.err.println("解码异常!");
}
System.out.println(str);//输出结果:?????
}
}