4、字符集、编码、解码、乱码

电脑只认识字节(0,1),人认识的是字符

编码(encode):从字符到字节

public static void main(String[] args) throws UnsupportedEncodingException {
		String msg = "性命生命使命a";
		
		//编码:字节数组
		byte[] datas = msg.getBytes();//默认使用工程的字符集
		System.out.println(datas.length);//utf-8中,中文3个字节,英文1个字节
	
		//编码:其他字符集
		datas = msg.getBytes("UTF-16LE");
		System.out.println(datas.length);//utf-16le中,每一个都是两个字节
		
		datas = msg.getBytes("GBK");
		System.out.println(datas.length);//中文两个字节,英文一个字节
	}

在这里插入图片描述

解码(decode):从字节到字符

public static void main(String[] args) throws UnsupportedEncodingException {
		String msg = "性命生命使命a";
		//编码:字节数组
		byte[] datas = msg.getBytes();//默认使用工程的字符集
		
		//解码:字符串
		msg = new String(datas,0,datas.length,"utf-8");
		System.out.println(msg);
	}

在这里插入图片描述

字符集:就是一本大字典,里面的编号和字符一一对应

常见的字符集:
在这里插入图片描述

乱码问题:解码的时候要知道正确的字符集和字节数,不然可能会导致乱码

1、字节数不够导致的乱码:
2、字符集不统一

public static void main(String[] args) throws UnsupportedEncodingException {
		String msg = "性命生命使命a";
		//编码:字节数组
		byte[] datas = msg.getBytes();//默认使用工程的字符集
		
		//乱码:1、字节数不够
		msg = new String(datas,0,datas.length-2,"utf-8");
		System.out.println(msg);
		msg = new String(datas,0,datas.length-1,"utf-8");
		System.out.println(msg);
		
		//乱码:2、字符集不统一
		msg = new String(datas,0,datas.length,"GBK");
		System.out.println(msg);
	}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值