我有以下代码:
using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("shift-jis"), true)) {
mCertainFileIsUTFFormat = !sr.CurrentEncoding.Equals(Encoding.GetEncoding("shift-jis"));
mCodingFromBOM = sr.CurrentEncoding;
String line = sr.ReadToEnd();
return line.Split('\n');
}
如果没有BOM,基本上读取文件并假设Shift-Jis。唉,这种方法总是,无论如何,返回Shift-JIS编码,即使有问题的文件中有BOM。我在这里做错了什么或者是否存在已知问题?我总是可以打开文件二进制文件并自己完成工作,但这应该是我想做的事情:))
答案 0 :(得分:6)
您需要拨打任何类型的Read
- StreamReader
在阅读之前不会检测到编码。即在ReadToEnd
电话后获取编码:
String line = sr.ReadToEnd();
mCodingFromBOM = sr.CurrentEncoding;
信息:StreamReader.CurrentEncoding
在第一次调用StreamReader的任何Read`方法之后,该值可能会有所不同,因为在第一次调用Read方法之前不会进行编码自动检测。