gpt4 book ai didi

c# - Filestream 在读取时预先添加垃圾字符

转载 作者:行者123 更新时间:2023-11-30 21:18:36 27 4
gpt4 key购买 nike

我正在阅读一个简单的文本文件,其中包含使用文件流类的单行。但似乎 filestream.read 在开头添加了一些垃圾字符。

代码下方。

using (var _fs = File.Open(_idFilePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
{
byte[] b = new byte[_fs.Length];
UTF8Encoding temp = new UTF8Encoding(true);
while (_fs.Read(b, 0, b.Length) > 0)
{
Console.WriteLine(temp.GetString(b));
Console.WriteLine(ASCIIEncoding.ASCII.GetString(b));


}
}

例如:我在文本文件中的数据只是“示例”。但是上面的代码返回

  "?sample" and
"???sample"

这是什么原因??它是文件指示符的开始吗?有没有办法只阅读我的实际内容??

最佳答案

byte order mark(BOM)由 Unicode 字符 0xFEFF 组成,用于标记文件所用的编码。

因此,如果您将文件正确解码为 UTF8,您就会将该字符作为字符串的第一个字符。如果你错误地将它解码为 ANSI,你会得到 3 个字符,因为 0xFEFF 的 UTF8 编码是字节序列“EF BB BF”,它是 3 个字节。

但是你的整个代码可以替换为

File.ReadAllText(fileName,Encoding.UTF8)

那也应该删除 BOM。或者您省略编码参数并让函数自动检测编码(它使用 BOM)

关于c# - Filestream 在读取时预先添加垃圾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4171976/

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