1.概念与问题
1.1 字符编码
计算机中存储的信息都是用二进制数表示的,而我们在屏幕上看到的数字丶英文丶标点符号丶汉字等字符是二进制数转换之后的结果. 根据某种规则,将字符存储到计算机中,称为编码.反之,将存储在计算机中的二进制数按某种规则解析显示出来,称为解码. 例如,按照A规则存储,那么想要解析显示出正确的文本符号,同样需要按照A规则解析,否则将会导致乱码现象.
字符编码 (Character Encoding) :一套自然语言的字符与二进制之间的对应规则.
1.2 字符集
字符集是一个系统支持的所有字符的集合,包括各国的文字丶标点符号丶图形符号丶数字等
计算机要准确的存储和识别各种字符集符号,需要进行字符编码,一套字符集至少有一套字符编码.常见的字符集有ASCII字符集丶GBK字符集丶Unicode字符集等.如图所示:
当指定了编码,它所对应的字符集也指定了. 想更详细了解各字符集丶编码信息,可在百度中搜索,这里不一一介绍.
1.3 编码引出的问题
在IDEA中,使用FileReader读取项目中的文本文件.由于IDEA的设置,都是默认的UTF-8编码,所以在读取时没有任何问题.但是,当读取Windows系统中创建的文本文件时,Windows系统中默认的是GBK编码,就会出现乱码的现象.如下所示:
public class Test {
public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("C:\\Users\\86184\\Desktop\\a.txt");
int len;
while ((len = fr.read()) != -1){
System.out.print((char)len);
}
fr.close();
}
}
//实际文件内容: 你//
输出结果:
��
那么我们如何实现读取GBK编码的文件呢?
1.4 转换流InputStreamReader类
Input