JAVA笔记- JAVA编码表详解

1- 编码表的概述

编码表:把计算机底层的二进制数据转换成我们能看到的字符
ASCII
GB2312 — GBK
Unicode 所有的字符都占2个字节
UTF-8 长度可变的码表
ANSI:本地编码表 gbk
Java中的字符串默认使用的ANSI(gbk)

  • 乱码:编码保持前后一致即可解决

2- Java中字符串的编码

2.1- 常用方法

构造方法(字节数组转字符串):
String():初始化一个新创建的 String 对象,使其表示一个空字符序列
String(byte[] bytes) 使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String

成员方法(字符串转字节数组):
getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组

代码示例:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

/*
 * 编码表:把计算机底层的二进制数据转换成我们能看到的字符
 * 		ASCII
 * 
 * 		GB2312	---	GBK
 * 		Unicode	所有的字符都占2个字节
 * 		UTF-8	长度可变的码表
 * 
 * ANSI:本地编码表	gbk
 * Java中的字符串默认使用的ANSI(gbk)
 * 
 * 乱码:编码保持前后一致即可解决
 * 
 */
public class EncoderDemo {
	public static void main(String[] args) throws IOException   {
		//method();
		
		FileInputStream fis = new FileInputStream("a.txt");
		byte[] bys = new byte[1024];
		int len = fis.read(bys);
		//System.out.println(new String(bys,0,len));
		System.out.println(new String(bys,0,len,"UTF-8"));
	}

	private static void method() throws UnsupportedEncodingException, FileNotFoundException, IOException {
		String s = "高薪就业";
		//byte[] bys = s.getBytes();//通过默认编码转换成数组
		byte[] bys = s.getBytes("UTF-8");
		
		FileOutputStream fos = new FileOutputStream("a.txt");
		fos.write(bys);
		fos.close();
	}

}

3- 字符流中的编码

3.1- 常见对象

InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader

OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的 OutputStreamWriter

代码示例

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

/*
 * 字符流中的编码
 * 
 * 字符流 = 字节流 + 编码
 * 
 */
public class EncoderDemo2 {
	public static void main(String[] args) throws IOException {
		//method();
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");
		//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"));
		String s = "迎娶白富美";
		osw.write(s);
		
		osw.close();
		
	}

	private static void method() throws IOException, UnsupportedEncodingException {
		FileWriter fw = new FileWriter("b.txt");
		
		String s = "月薪过万";
		byte[] bys = s.getBytes("UTF-8");
		
		//fw.write(s);
		fw.write(new String(bys));
		fw.close();
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值