文本文件编码问题



我在询问之前发现了一些关于编码问题的问题,但是它们不是我想要的。目前我有两个方法,最好不要修改。

//FileManager.cs
public byte[] LoadFile(string id);
public FileStream LoadFileStream(string id);

它们对所有类型的文件都能正常工作。现在我有一个文本文件的ID(它保证是一个.txt文件),我想获得它的内容。我尝试了以下操作:

byte[] data = manager.LoadFile(id);
string content = Encoding.UTF8.GetString(data);

但显然它不适用于其他非utf8编码。为了解决编码问题,我试图先得到它的FileStream,然后使用StreamReader

public StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks);

我希望这个领主可以解决编码,但我仍然得到奇怪的内容。

using(var stream = manager.LoadFileStream(id))
using(var reader = new StreamReader(stream, true))
{
    content = reader.ReadToEnd();    //still incorrect
}

也许我误解了detectEncodingFromByteOrderMarks的用法?如何解决编码问题?

ByteOrderMarks有时添加到以unicode格式之一编码的文件中,以指示由多个字节组成的字符是否以大或小端序格式存储(是先存储字节1,然后存储字节0?)或者先字节0,再字节1?)当文件被windows和unix机器同时读取时,这一点尤其重要,因为它们以相反的方向写入这些多字节字符。

如果你读取一个文件,并且前几个字节等于ByteOrderMark,那么这个文件很有可能是用与ByteOrderMark匹配的unicode格式编码的。不过,正如影子巫师所说,你永远无法确定。因为它总是一个猜测,所以该选项作为参数提供。

如果在文件的第一个字节中没有ByteOrderMark,则很难猜测文件的编码。

更多信息:http://en.wikipedia.org/wiki/Byte_order_mark

相关内容

  • 没有找到相关文章

最新更新