StreamReader 有十个构造函数,我们说其中三个:
第一个构造函数是使用默认的编码读取文件。
第二个构造函数增加了一个参数 true/false,用来表示是否自动探测 BOM(文件前端标识文字编码的字节)。
第三个构造函数又增加了一个参数 encoding,因为有些编码(比如 GB2312、UTF7)就没有 BOM,就认识不到编码,就需要手动指定一个编码。
对于第一个构造函数,CurrentEncoding 就是 UTF-8。
对于第二个构造函数,如果识别到了编码,CurrentEncoding 就是识别到的编码,否则就是 UTF-8。
对于第三个构造函数,如果没有识别到编码,就是 encoding 指定的编码。
真的没有解决办法了吗?
我们还忽略了一个东西 Encoding.Default。
注意,此时 CurrentEncoding 就可以判断编码了,但是前提是一定要至少调用一个 Read(ReadToEnd 这些带 Read 的方法也可以) 之后。