1、之前我们使用字符流读取中文是否有乱码?
2、如果代码编码和文件编码不一致,使用字符流直接读取还能不乱码吗?
3、字符流直接读取文本内容
- 必须文件和代码编码一致才不会乱码
- 如果文件和代码编码不一致,读取将出现乱码
4、字符输入转换流
4.1、如果代码编码和文件编码不一致,使用字符流直接读取还能不乱码码?
4.2、如何解决呢?
- 使用字符输入转换流
- 可以提取文件(GBK)的原始字节流,原始字节不会存在问题
- 然后把 字节流 以指定编码转换成 字符输入流,这样字符输入流中的字符就不乱码了
package com.csdn.d6_transfer_stream;
import java.nio.charset.StandardCharsets;
public class InputStreamReaderDemo01 {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("src/com/csdn/d6_transfer_stream/InputStreamReaderDemo01.java");
Reader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
System.out.println(line);
- 字符输入转换流:InputStreamReader,可以把原始的 字节流 按照编码转换成 字符输入流
| 构造器 | 说明 |
|---|
| public InputStreamReader(InputStream is) | 可以把原始的 字节流 按照代码默认编码转换成 字符输入流 。几乎不用,与默认的FileReader一样 |
| public InputStreamReader(InputStream is,String charset) | 可以把原始的 字节流 按照指定编码转换成 字符输入流,这样 字符流 中的字符就不乱码了(重点) |
4.3、字符输入转换流InputStreamReader作用:
- 可以解决字符流读取不同编码乱码的问题
- public InputStreamReader(InputStream is,String charset)
1、 字符输出转换流
- 可以把 字符 以指定编码获取 字节 后再使用字节输出流写出去
- “我爱你中国”.getBytes(编码)
- 也可以使用字符输出转换流实现
package com.csdn.d6_transfer_stream;
import java.nio.charset.StandardCharsets;
public class OutputStreamWriterDemo02 {
public static void main(String[] args) throws IOException {
OutputStream os = new FileOutputStream("src\\csdn.txt");
Writer osw = new OutputStreamWriter(os, StandardCharsets.UTF_8);
BufferedWriter bw = new BufferedWriter(osw);
- 字符输出转换流:OutputStreamWriter,可以把 字节 输出流按照指定编码转换成 字符 输出流
| 构造器 | 说明 |
|---|
| public OutputStream(OutputStream os) | 可以把原始的 字节 输出流按照代码默认编码转换成 字符 输出流。几乎不用。 |
| public OutputStream(OutputStream os,String charset) | 可以把原始的 字节 输出流按照指定编码转换成 字符 输出流(重点) |
2、字符输出转换流OutputStreamWriter的作用?
- public OutputStreamWriter(OutputStream os,String charset)
- 可以指定编码把 字节 输出流转换成 字符 输出流,从而可以指定写出去的字符编码