gpt4 book ai didi

c# - 文本文件编码问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:15 25 4
gpt4 key购买 nike

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

//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 格式编码的可能性很高。但是,正如 Shadow Wizard 提到的那样,您永远无法确定。由于它始终是猜测,因此该选项作为参数提供。

如果文件的前几个字节没有ByteOrderMark,就很难猜出文件的编码。

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

关于c# - 文本文件编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com