编码:字符(能看懂的)--字节(看不懂的)
解码:字节(看不懂的)-->字符(能看懂的)
Character Encoding
: 就是一套自然语言的字符与二进制数之间的对应规则。字符集 Charset
:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。
计算机要准确的存储和识别各种字符集符号,需要进行字符编码,一套字符集必然至少有一套字符编码。常见字符集有ASCII字符集、GBK字符集、Unicode字符集等。
当指定了编码,它所对应的字符集自然就指定了,所以编码才是我们最终要关心的
FileReader
读取项目中的文本文件。由于IDEA的设置,都是默认的UTF-8
编码,所以没有任何问题。但是,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。void close()
关闭此流,但要先刷新它。abstract void flush()
刷新该流的缓冲。void write(int c)
:写入单个字符。abstract void write(char[] cbuf, int off, int len)
写入字符数组的某一部分。void write(String str)
写入字符串。void write(String str, int off, int len)
写入字符串的某一部分。OutputStreamWriter(OutputStream in)
: 创建一个使用默认字符集的字符流。OutputStreamWriter(OutputStream in, String charsetName)
: 创建一个指定字符集的字符流。public class Demo {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\document\\code\\xuexi\\java\\aaa\\a.txt"),"utf-8");
osw.write("你好abc");//9个字节
osw.flush();
osw.close();
}
}
public class Demo02 {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\document\\code\\xuexi\\java\\aaa\\a.txt"),"gbk");
osw.write("你好abc");//7个字节
osw.flush();
osw.close();
}
}
int read()
读取单个字符。int read(char[] cbuf)
将字符读入数组。void close()
关闭该流并释放与之关联的所有资源。InputStreamReader(InputStream in)
: 创建一个使用默认字符集的字符流,默认utf-8。InputStreamReader(InputStream in, String charsetName)
: 创建一个指定字符集的字符流。//a.txt文件编码为gbk
public class Demo {
public static void main(String[] args) throws IOException {
InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\document\\code\\xuexi\\java\\aaa\\a.txt"),"gbk");
int len=0;
while ((len=isr.read())!=-1)
System.out.print((char) len);//你好abc
isr.close();
}
}
public class Demo {
public static void main(String[] args) throws IOException {
InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\document\\code\\xuexi\\java\\aaa\\a.txt"));//默认编码为utf-8
int len=0;
while ((len=isr.read())!=-1)
System.out.print((char) len);//???abc
isr.close();
}
}
原文:https://www.cnblogs.com/wu-myblog/p/14249191.html