gpt4 book ai didi

c# - 为什么来自 Assembly.GetManifestResourceStream() 的文本以三个垃圾字符开头?

转载 作者:太空狗 更新时间:2023-10-29 17:55:45 26 4
gpt4 key购买 nike

我有一个 SQL 文件作为嵌入式资源添加到我的 VS.NET 2008 项目中。每当我使用以下代码读取文件内容时,返回的字符串总是以三个垃圾字符开头,然后是我期望的文本。我认为这与我使用的 Encoding.Default 有关,但这只是一个猜测。为什么这个文本不断出现?我应该只删除前三个字符还是有更明智的方法?

public string GetUpdateRestoreSchemaScript()
{
var type = GetType();
var a = Assembly.GetAssembly(type);
var script = "UpdateRestoreSchema.sql";
var resourceName = String.Concat(type.Namespace, ".", script);
using(Stream stream = a.GetManifestResourceStream(resourceName))
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
// UPDATE: Should be Encoding.UTF8
return Encoding.Default.GetString(buffer);
}
}

更新:我现在知道,如果我简单地更改最后一行以返回 UTF-8 编码的字符串,我的代码将按预期工作。对于这个嵌入式文件,它永远是真的,但它会永远是真的吗?有没有办法测试任何缓冲区以确定其编码?

最佳答案

可能文件是 utf-8 编码,Encoding.Default 是 ASCII。为什么不使用特定的编码?

编辑以回答评论:

为了猜测文件编码,您可以查找 BOM在流的开始。如果它存在,它会有所帮助,如果不存在,那么您只能猜测或询问用户。

关于c# - 为什么来自 Assembly.GetManifestResourceStream() 的文本以三个垃圾字符开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578752/

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