Java 字符集,编码、解码
2023-09-11 14:14:35 时间
1、
计算机中文件、数据底层都是基于二进制的。
计算机底层并没有文本文件、图片文件之分,它只是记录着每个文件的二进制序列。
字符集:包含着字符和二进制序列之间的对应关系,一个字符对应一个二进制序列。
编码(Encode):把人能看懂的明文转换为计算机能理解二进制序列。
解码(Decode):把计算机中的二进制序列转换为人能看懂的明文。
乱码:解码方式与编码方式不同,即编码、解码使用的字符集不一致。
Windows中文本文件的默认字符集是GBK。
2、
字节的文件输出流可以指定写入模式:
FileOutputStream fos=new FileOutputStream(String/File file);
FileOutputStream fos=new FileOutputStream(String/File file,boolean b); //第二个参数指定是否是追加模式,true——追加,false——覆盖。
字符的文件流可以指定字符集:
FileWriter fw=new FileWriter(String/File file);
FileReader fr=new FileReader(String/File file);
//指定字符集
FileWriter fw=new FileWriter(String/File file, String/Charset charset);
FileReader fr=new FileReader(String/File file, String/Charset charset);
//字符的文件输出流还可以指定写入模式
FileWriter fw=new FileWriter(String/File file, boolean b ); //是否是追加模式
FileWriter fw=new FileWriter(String/File file, String/Charset charset, boolean b);
2个转换流可以指定编码/解码的字符集:
InputStreamReader isr=new InputStreamReader(InputStream is, String/Charset charset); //指定解码字符集
OutputStreamWriter osr=new OutputStreamWriter(OutputStream os, String/Charset charset); //指定编码字符集
3、NIO中的Charset类
1 //创建Charset对象,指定编码/解码用的字符集 2 Charset charset=Charset.forName("GBK"); 3 4 //创建编码器 5 CharsetEncoder encoder=charset.newEncoder(); 6 //使用编码器进行编码。编码是把字符序列转换为字节序列,参数只能是CharBuffer类型,返回值是ByteBuffer类型 7 ByteBuffer byteBuffer=encoder.encode(CharBuffer charBuffer); 8 9 //创建解码器 10 CharsetDecoder decoder=charset.newDecoder(); 11 //使用解码器进行解码。解码是把字节序列转换为字符序列,参数为ByteBuffer类型,返回值是CharBuffer类型 12 CharBuffer charBuffer=decoder.decode(ByteBuffer byteBuffer);
也可以不创建编码器、解码器:
1 //创建Charset对象,指定编码/解码用的字符集 2 Charset charset=Charset.forName("GBK"); 3 4 //编码 5 ByteBuffer byteBuffer=charset.encode(String str); //此处可使用String做参数 6 ByteBuffer byteBuffer=charset.encode(CharBuffer charBuffer); 7 8 //解码 9 CharBuffer charBuffer=charset.decode(ByteBuffer byteBuffer);
更加简单。
String类的对象还可以使用以下方法将String(字符序列)编码为byte[](字节序列):
- byte[] getBytes() //使用平台默认的字符集
- byte[] getBytes(String/Charset charset) //使用指定的字符集
返回编码好的字节序列。
相关文章
- Java 方法
- Java字符编码的转化问题
- Java核心技术卷I基础知识1.2.5 安全性
- Java核心技术卷I基础知识3.10.2 数组初始化以及匿名数组
- Java详解,java后端应届生面试题
- 第57节:Java中流的操作以及编码解码
- java常用检验接口control方式
- java中文乱码解决之道(五)—–java是如何编码解码的
- Redis操作List工具类封装,Java Redis List命令封装
- Java学习-058-Jsoup爬虫获取中国所有的三级行政区划数据(三),处理二级编码缺失
- java中文乱码解决之道(六)—–javaWeb中的编码解码
- java安全编码指南之:死锁dead lock
- Java加载资源文件的两种方法
- java学习-http中get请求的非ascii参数如何编码解码探讨
- Java特性和优势以及安装Java的开发环境
- java中接口的定义与实现